目前我知道三种方法。
一.守护进程
守护进程的介绍,看阮一峰的文章,我放在参考链接。服务器上的软件的配置中,一般都有守护进程相关的配置,需要时去查你用的软件怎么配置就行。个人软件用守护进程,不如后两个方便。
二.nohup
nohup 你的命令 &,例如nohup python test.py &,若没权限加sudo
运行后出现提示nohup: ignoring input and appending output to `nohup.out',意思是程序的输出会保存在nohup.out,例如一些打印信息。
我是在test.py所在文件夹执行的nohup命令,所以生成的nohup.out和test.py在同一个文件夹,也就是当前目录,如果当前目录的nohup.out不可写,则写到$HOME/nohup.out。
如果需要指定nohup.out的路径,nohup 你的命令 > nohup.out的绝对路径 &,这只会重定向标准输出stdout,如果你还想重定向标准错误stderr,并且是到同一个nohup.out文件,下面两种写法都可以
nohup 你的命令 > nohup.out绝对路径 2>&1 &
nohup 你的命令 &> nohup.out绝对路径 &
重定向的介绍和其他用法看我另一篇文章中末尾的参考链接。
查看程序是否在运行,ps -ef | grep 你的关键词,例如ps -ef | grep py,输出结果中就有刚才运行的python文件名。
三.screen
需先安装才能使用,apt install screen或yum install screen,具体用法看参考链接。
四.补充
如果你想通过修改/etc/rc.d/rc.local,配合nohup实现开机自启Flask服务,发现生成的nohup.out中信息不全,没有Flask接口收到的请求的记录,也没有Flask的启动ip和端口信息,看我另一篇文章。
使用nohup命令运行起来的代码,如果想停止运行,就需要先用ps -ef | grep 你的关键词 来查询进程id,再用kill命令结束这个进程。这个过程有些麻烦,可以写成shell脚本,nohup启动成功时将pid写入文件,kill命令结束进程时从文件读取进程id。命令的具体参数介绍看参考链接。
start_test.sh,赋予执行权限,在sh文件所在目录执行./start_test.sh就能运行python代码。
nohup python test.py & echo $! > test_pid.txt
stop_test.sh ,赋予执行权限,在sh文件所在目录执行./stop_test.sh就能结束刚才运行的python进程。
kill -9 `cat test_pid.txt`
参考链接:
Linux 守护进程的启动方法 - 阮一峰的网络日志 (ruanyifeng.com)
Systemd 入门教程:命令篇 - 阮一峰的网络日志 (ruanyifeng.com)
Systemd 入门教程:实战篇 - 阮一峰的网络日志 (ruanyifeng.com)
Xshell关闭后,如何保持程序在云服务器上的运行?__ZZKOOK
xshell退出保持后台服务运行的方法 - 北方卧龙 - 博客园
xshell 关闭后保持程序运行_夏华东的博客的博客-优快云博客_xshell关闭后保持程序运行
Screen会话命令 Linux - ywl925 - 博客园
nohup和&后台运行,进程查看及终止 - Mr_Yun - 博客园 (cnblogs.com)
Linux后台运行命令nohub输出pid到文件(转) - EasonJim - 博客园 (cnblogs.com)
使用nohup后台运行并获取pid_Wu_Menghao的博客-优快云博客_nohup pid
linux nohup 进程id_Linux 后台运行命令 nohup 输出 pid 到文件_冲出黑洞的光芒的博客-优快云博客
本文介绍了在Linux系统中如何让程序在后台持续运行的三种方法:守护进程、nohup和screen。守护进程常用于服务器软件配置,个人软件使用nohup或screen更方便。nohup可以将程序输出重定向到nohup.out文件,screen则提供了一个交互式的多窗口管理工具。此外,还提到了如何通过shell脚本管理和停止由nohup启动的进程,并讨论了开机自启和进程管理的相关技巧。
4482

被折叠的 条评论
为什么被折叠?



