Linux Shell自动拉起进程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux Shell自动拉起进程相关的知识,希望对你有一定的参考价值。
参考技术A 新建文件夹/root/test/,test文件夹中有myCPP.cpp,myTEXT.txt,restart.sh该文件的功能是每隔5s往myTEXT.txt中写入当前时间
编译得到可执行文件mycpp: g++ myCPP.cpp -std=c++11 -o mycpp
注意有时候因为权限问题会导致shell拉起失败,这里粗暴地开放所有权限 chmod 777 mycpp
shell脚本,检测目标程序是否处于运行状态,如果不运行则将其拉起。
加上crontab就可以让脚本定时执行,一旦发现进程没有运行,则启动该进程,这样就实现了进程的自动拉起。
通过 crontab -e 进入类似vim的操作界面,在文件末尾补充 */1 * * * * /root/test/restart.sh /root/test/mycpp& ,让restart.sh脚本每一分钟运行一次(即每分钟检测一次mycpp是否正在执行)
查看mycpp进程是否在执行 ps -ef | grep mycpp
查看mycpp执行写入的结果 tail -f myTEXT.txt
linux使用Supervisor守护进程
Supervisor是什么
是Linux/Unix系统下的一个进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制,
应用场景
- 执行耗时爬虫任务
- 守护队列,以及workman进程
- 需要一直执行的程序
安装Supervisor
linux下直接执行yun安装,方便快捷
yum install -y epel-release && yum install -y supervisor
安装完会生成三个执行程序
supervisortd、supervisorctl、echo_supervisord_conf
- supervisortd:用于管理supervisor本身服务
- supervisorctl:用于管理我们需要委托给superviso工具的服务
- echo_supervisord_conf:用于生成superviso的配置文件
- supervisor的守护进程服务(用于接收进程管理命令)
[root@ad581v8efzsd5 /]# which supervisord
/bin/supervisord
[root@ad581v8efzsd5 /]# which supervisorctl
/bin/supervisorctl
[root@ad581v8efzsd5 /]# which echo_supervisord_conf
/bin/echo_supervisord_conf
安装完启动
#supervisord启动
supervisord -c /etc/supervisord.conf #启动supervisord进程
编写workman被superviso守护
- 找到配置文件
/etc/supervisord.conf - 在最下面添加如下代码
vim /etc/supervisord.d/redis.conf
[program:dd_thinkphp_workman]
command= /usr/local/php/bin/php think worker:server ; 被监控进程
directory= /data/wwwroot/thinkphp6; 项目地址(必填)
;process_name=%(process_num)02d
;numprocs=1 #启动几个进程
autostart=true ;随着supervisord的启动而启动
autorestart=true ;自动启动
startsecs=1 ;程序重启时候停留在runing状态的秒数
startretries=10 ;启动失败时的最多重试次数
redirect_stderr=true ;重定向stderr到stdout
stdout_logfile= /data/wwwlogs/dd_thinkphp_workman.log; stdout文件,日志文件
- 使用super启动workman
#杀掉supervisord
ps -ef|grep supervisord
root 23164 1 0 10:47 ? 00:00:00 /usr/bin/python /bin/supervisord -c /etc/supervisord.conf
root 27549 27402 0 11:07 pts/2 00:00:00 grep --color=auto super
kill -9 23164
#重新启动supervisord使其重新加载配置文件,supervisord默认会把workman拉起来
supervisord -c /etc/supervisord.conf
- 其他命令
supervisorctl status workman #workman状态
supervisorctl stopworkman #停止workman
supervisorctl start workman #启动workman
supervisorctl restart workman #重启workman
supervisorctl reoload workman #重载workman
管理supervisorctal
supervisorctl status all #查看所有进程状态
supervisorctl stop all #停止所有进程
supervisorctl start all #启动所有进程
supervisorctl restart all #重启所有进程
supervisorctl reoload all #重载所有进程
总的来说是非常简单的,像一些队列啊,workman这些不能挂掉,就守护起来就行
以上是关于Linux Shell自动拉起进程的主要内容,如果未能解决你的问题,请参考以下文章