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

安装完会生成三个执行程序
supervisortdsupervisorctlecho_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守护

  1. 找到配置文件
    /etc/supervisord.conf
  2. 在最下面添加如下代码
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文件,日志文件
  1. 使用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
  1. 其他命令
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自动拉起进程的主要内容,如果未能解决你的问题,请参考以下文章

linux使用Supervisor守护进程

linux使用Supervisor守护进程

Supervisor-守护进程工具

supervisor 简单使用

Linux下使用Shell脚本实现进程监控

斑马斑马-12-白云之上- supervisor 进程管理