UNIX 进程管理 1.supervisor安装
发布时间:2023-02-13 13:11:24 所属栏目:Unix 来源:
导读: 是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,su
|
是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能UNIX 进程管理,不再需要自己写shell脚本来控制。 1.supervisor安装 pip install supervisor 2.supervisor配置 2.1.初始化配置文件 mkdir /etc/supervisor echo_supervisord_conf > /etc/supervisor/supervisord.conf 2.2.修改配置文件 配置文件supervisord.conf各字段解释可参考: [unix_http_server] ;修改file的路径 file=/etc/supervisor/supervisor.sock ; the path to the socket file ;chmod=0700 ; socket file mode (default 0700) ;chown=nobody:nogroup ; socket file uid:gid owner ;username=user ; default is no username (open server) ;password=123 ; default is no password (open server) ...... [supervisord] ;修改logfile的路径 logfile=/etc/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB logfile_backups=10 ; # of main logfile backups; 0 means none, default 10 loglevel=info ; log level; default info; others: debug,warn,trace ;修改pidfile的路径 pidfile=/etc/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid ...... [supervisorctl] ;修改serverurl serverurl=unix:///etc/supervisor/supervisor.sock ; use a unix:// URL for a unix socket ...... ;[include] ;files = relative/directory/*.ini ;下面是新增的 [include] files = /etc/supervisor/config.d/ 2.3.配置进程管理文件 上面的配置文件supervisord.conf是用来管理supervisord进程(父进程)的,而此处的进程管理文件是用来管理被supervisord守护的进程(子进程)的。 mkdir /etc/supervisor/config.d cd /etc/supervisor/config.d vim one_name.conf one_name.conf可以自己取一个名字(后缀名不要改,如果要改,需要改2.2配置文件中的files的值),将以下内容拷贝到one_name.conf中 ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名 [program:shse_server] command=nohup python3 -u zqs.py >/dev/null & ;启动被守护进程的命令 ;numprocs=1 ; 默认为1 ;process_name=%(program_name)s ; 默认为 %(program_name)s,即 [program:x] 中的 x directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录 user=root ; 使用 root 用户来启动该进程 ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次 autorestart=true redirect_stderr=true ; 重定向输出的日志 stdout_logfile = /var/log/supervisord/shse_server.log loglevel=info 2.4.启动Supervisor服务 # 由于2.3小节配置文件中日志文件存放路径是/var/log/supervisord,故需先创建 mkdir /var/log/supervisord # 启动supervisor服务 supervisord -c /etc/supervisor/supervisord.conf 2.5.守护多个进程 如果需要守护多个进程,则最简单的方式就是在2.3小节中的配置文件中定义多个program ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名 [program:zqs_server] command=nohup python3 -u zqs.py >/dev/null & ;启动被守护进程的命令 ;numprocs=1 ; 默认为1 ;process_name=%(program_name)s ; 默认为 %(program_name)s,即 [program:x] 中的 x directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录 user=root ; 使用 root 用户来启动该进程 ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次 autorestart=true redirect_stderr=true ; 重定向输出的日志 stdout_logfile = /var/log/supervisord/zqs_server.log loglevel=info ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名 [program:zqs2_server] command=nohup python3 -u zqs2.py >/dev/null & ;启动被守护进程的命令 ;numprocs=1 ; 默认为1 ;process_name=%(program_name)s ; 默认为 %(program_name)s,即 [program:x] 中的 x directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录 user=root ; 使用 root 用户来启动该进程 ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次 autorestart=true redirect_stderr=true ; 重定向输出的日志 stdout_logfile = /var/log/supervisord/zqs2_server.log loglevel=info 配置完成后,需要更新supervisord supervisorctl reload 守护多个进程还可以通过group来完成 [group:foo] programs=bar,baz priority=999 示例如下 [group:ttt] programs=zqs_server,zqs2_server ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名 [program:zqs_server] command=nohup python3 -u zqs.py >/dev/null & ;启动被守护进程的命令 ;numprocs=1 ; 默认为1 ;process_name=%(program_name)s ; 默认为 %(program_name)s,即 [program:x] 中的 x directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录 user=root ; 使用 root 用户来启动该进程 ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次 autorestart=true redirect_stderr=true ; 重定向输出的日志 stdout_logfile = /var/log/supervisord/zqs_server.log loglevel=info ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名 [program:zqs2_server] command=nohup python3 -u zqs2.py >/dev/null & ;启动被守护进程的命令 ;numprocs=1 ; 默认为1 ;process_name=%(program_name)s ; 默认为 %(program_name)s,即 [program:x] 中的 x directory=/home/fhpt/zqs/alg_nlp ; 执行 command 之前,先切换到工作目录 user=root ; 使用 root 用户来启动该进程 ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次 autorestart=true redirect_stderr=true ; 重定向输出的日志 stdout_logfile = /var/log/supervisord/zqs2_server.log loglevel=inf 配置完成后,需要更新supervisord supervisorctl reload 如果需要停止group中的进程 # 停止group:ttt中的所有进程 supervisorctl stop ttt:* # 停止group:ttt中的某个进程 supervisorctl stop ttt:zqs_server PS:如果使用group来管理进程,则此时不能用以下命令停止某个进程 supervisorctl stop program_name 3.相关命令 # 启动supervisor supervisord # 修改完配置文件后重新启动supervisor supervisorctl reload # 查看supervisor监管的进程状态 supervisorctl status # 启动XXX进程 supervisorctl start program_name # 停止XXX进程 supervisorctl stop program_name # 停止全部进程,注:start、restart、stop都不会载入最新的配置文件。 supervisorctl stop all # 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启 supervisorctl update # 停止group中所有进程 supervisorctl stop group_name:* # 停止group中某个进程 supervisorctl stop group_name:program_name 4.安装配置可能出现的错误 Starting supervisor: Unlinking stale socket /etc/supervisor/supervisor.sock find / -name supervisor.sock unlink /***/supervisor.sock 将查找到的sock文件都unlink 5.supervisor开机自启动 在目录/usr/lib/systemd/system/ 新建文件supervisord.service,并添加配置内容 PS:如果没有该路径,则手动创建 [Unit] Description=Process Monitoring and Control Daemon After=rc-local.service nss-user-lookup.target [Service] Type=forking ExecStart=supervisord -c /etc/supervisor/supervisord.conf ;开机启动时执行 ExecStop=supervisord shutdown ExecReload=supervisord reload killMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.targe 启动服务 systemctl enable supervisord 验证是否开机自启动 systemctl is-enabled supervisord 出现以下提示信息,则说明开机自启动已设置成功。 (编辑:我爱制作网_池州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐

浙公网安备 33038102330577号