ubuntu 开机自启动 守护进程 supervisor

版权声明:© 本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_41204464/article/details/90272214

当我们写好程序时,有时希望这个程序一开机就能运行

程序意外被终止时(内部 或 外设设备出了问题),希望程序能自动重新运行

目录

解决方案:

其他一些配置,通过这个例子讲解

补充说明:


解决方案:

使用 守护进程 supervisor ,需要先安装一下:

1)安装

可以使用一下命令:

sudo apt-get install supervisor

安装成功后,supervisor就会默认启动

2) 使用 

将每个进程的配置文件单独拆分,放在 /etc/supervisor/conf.d/目录下,以.conf作为扩展名,

cd /etc/supervisor/conf.d/
sudo gedit haha.conf

例如test.conf定义的一个简单的HTTP服务器:

[program:test]
command=python -m SimpleHTTPServer

3)重启supervisor,让配置文件生效,然后启动test进程:

sudo supervisorctl reload
sudo supervisorctl start test

如果要停止进程,就用stop 

其他一些配置,通过这个例子讲解

[program:meta.txn.recover.on.error]
command=/cas/bin/meta.txn.recover.on.error ; 被监控的进程路径
numprocs=1                    ; 启动几个进程
directory=/cas/bin                ; 执行前要不要先cd到目录去,一般不用
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启。。当然要选上了
startretries=10               ; 启动失败时的最多重试次数
exitcodes=0                 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=KILL               ; 用来杀死进程的信号
stopwaitsecs=10               ; 发送SIGKILL前的等待时间
redirect_stderr=true          ; 重定向stderr到stdout
stdout_logfile=logfile        ; 指定日志文件

常用命令: 

supervisorctl start programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
supervisor启动和停止的日志文件存放在/var/log/supervisor/supervisord.log
注意:显式用stop停止掉的进程,用reload或者update都不会自动重启

下面结合我的实际开发,分享一下例子:

1)先进入目录:

cd /etc/supervisor/conf.d/

2)新建一个文件,以conf为文件结尾

sudo gedit haha.conf

内容:

[program:meta.txn.recover.on.error]
command=/home/pu/pu_student/壁障/test        ; 被监控的进程路径
numprocs=1                    ; 启动几个进程
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启。。当然要选上了
startretries=10               ; 启动失败时的最多重试次数
exitcodes=0                 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=KILL               ; 用来杀死进程的信号
stopwaitsecs=10               ; 发送SIGKILL前的等待时间
redirect_stderr=true          ; 重定向stderr到stdout
stdout_logfile=logfile        ; 指定日志文件

目的,运行程序:test , 程序放在目录:/home/pu/pu_student/  

startretries=10               ; 启动失败时的最多重试次数 10 

 关机,重启,用top命令看一下test是否有运行:

成功开机自动启动,启动失败时会重试的

补充说明:

如果 守护进程 supervisor不能使用的朋友,尝试先把python默认设置为 python2,再启动守护进程 supervisor 服务。

python3 切换到 python2:


gedit  ~/.bashrc             #执行命令1 

alias python=python2         #执行命令2   需改内容,指向python2

source ~/.bashrc             #执行命令3   更新一下python默认内容

感谢朋友haha,协助完成这篇博客。

希望对你有帮助。

猜你喜欢

转载自blog.csdn.net/qq_41204464/article/details/90272214