简单方便的linux定时任务管理器——supervisor

背景

我们在linux服务器上部署模型或者一个长期运行的程序的时候,通常使用的是nohup方法,因为nohup真的非常简单,只需要一行命令即可,但是nohup不好的地方就在于无法监控,并且无法自动中断重启,如果我们要查看一个nohup的程序是否在运行,需要每次输入ps -aux | grep "运城程序"才可以,比较繁琐,因此这里就推荐超好用的supervisor定时管理服务,并介绍一下他的核心用法,可以轻松上手

初次安装

由于supervisor在服务器上已经安装好了,等下次有机会自己安装的时候再更新~

3步完成部署

首先介绍一下supervisor的安装路径,通常会安装在/etc/下面,在/etc/supervisord.conf文件的最下面,我们可以看到supervisor的加载文件路径,这个路径是可以更改的

[include]
files =/etc/supervisord.d/*.ini

知道加载文件的路径后,咱们就可以开始部署程序了

  1. 编写.ini文件,格式如下
[program:deploy]
process_name=%(program_name)s
command=  /home/venv/bin/python  /home/python/deploy_api.py
directory= /home/python/
environment=PYTHONPATH=/home/
stdout_logfile=/home/logs/deploy.log
stderr_logfile=/home/logs/deploy.log
numprocs=1
numprocs_start=0
autostart=true
autorestart=true
  • program: deploy,这里的deploy决定了在supervisor中显示的名字,不同与其他重名
  • command: 第一个命令为python所在目录,第二个命令为想要运行的程序(这是以python进行距离,如果是java等其他一样)
  • directory: 项目目录,不一定非得是运行程序的上级
  • enviroment: 在这里是python环境的上级,anaconda也是类似的
  • stdout_logfile: 是输出的记录
  • stderr_logfile: 是错误的记录
  • numprocs: 运行的进程数
  • numprocs_start: 开始进程的编号
  • autostart: 是否自动启动
  • autorestart: 是否自动重启
  1. 在写.ini文件保存后,我们可以直接在centos上运行supervisorctl update进行更新,在ubuntu上可能得加上sudo
  2. 然后我们在命令行上输入supervisorctl就可以看到咱们的程序名字出现了,如果显示RUNNING那就代表程序正常运行了

注意点

  1. ini文件中最好不要写中文注释,可能会导致ini文件无法运行
  2. 要使用对应环境的python去运行,ini文件必须写对,不然会出现spawn error

其他语法

  1. sudo supervisorctl shutdown可以关闭supervisor
  2. 重启命令sudo supervisord -c /etc/supervisord.conf
  3. sudo supervisorctl reload重新加载所有supervisor定时命令,在多人合作时最好不要用
  4. supervisorctl命令行中,输入status刷新状态

需要控制环境变量时

在某些时候,我们运行python程序时,需要控制系统环境变量,例如:
LD_PRELOAD=./jemalloc-5.3.0/lib/libjemalloc.so python app.py
这种情况下,supervisor中的command便不能直接将环境变量加在前面,这种情况我们可以写一个shell脚本

LD_PRELOAD=/home/deploy/ps/workdir/jemalloc-5.3.0/lib/libjemalloc.so /home/deploy/anaconda3/envs/torch/bin/python /home/deploy/ps/workdir/deploy_api.py

然后将.ini文件的command改成
command=bash run_image_feature_api.sh

2023.4.26 更新

  1. 这次在ubuntu服务器上配置supervisor,踩了很多坑,首先是文件的目录位置是不一样的,与centos配置文件保存在/etc/supervisord.d/中不同,ubuntu是保存在/etc/supervisor/conf.d/,并且配置文件的后缀为.conf而并非是.ini
  2. unix:///var/run/supervisor.sock no such file,这个是缺少文件,需要创建sudo touch /var/run/supervisor.sock,同时需要赋予修改权限,sudo chmod 777 /var/run/supervisor.sock
  3. unknown error making dispatchers for ‘etcd‘: EACCES,这个问题是成功运行supervisord之后,运行sudo supervisorctl出现的,其原因是因为log文件没有修改权限导致的,因此我们需要对log文件增加权限,找到配置文件中设定的stderr文件和stdout文件所在位置,运行sudo chmod 777 log_files就可以了

2024.2.22更新

本次重启服务器,又遇到了unix:///var/run/supervisor.sock no such file问题,这次使用sudo service supervisord restart便解决了问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值