为了账号安全,请及时绑定邮箱和手机立即绑定

如果一个进程死了,我如何编写bash脚本来重新启动它?

如果一个进程死了,我如何编写bash脚本来重新启动它?

HUX布斯 2019-06-19 10:19:56
如果一个进程死了,我如何编写bash脚本来重新启动它?我有一个python脚本,它将检查队列并对每个项执行操作:# checkqueue.pywhile True:   check_queue()   do_something()如何编写bash脚本,以检查它是否正在运行,如果没有,则启动它。大致如下伪代码(或者它应该做一些类似的事情)ps | grep?):# keepalivescript.shif processidfile exists:   if processid is running:      exit, all ok run checkqueue.py write processid to processidfile我从crontab打电话说:# crontab*/5 * * * * /path/to/keepalivescript.sh
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

最简单的方法是使用文件中的Flock。在Python脚本中

lf = open('/tmp/script.lock','w')if(fcntl.flock(lf, fcntl.LOCK_EX|fcntl.LOCK_NB) != 0): 
   sys.exit('other instance already running')lf.write('%d\n'%os.getpid())lf.flush()

在shell中,您可以实际测试它是否正在运行:

if [ `flock -xn /tmp/script.lock -c 'echo 1'` ]; then 
   echo 'it's not running'
   restart.
else
   echo -n 'it's already running with PID '
   cat /tmp/script.lockfi

但是,您当然不必进行测试,因为如果它已经在运行并重新启动,它将退出'other instance already running'

当进程死亡时,它的所有文件描述符都会被关闭,所有锁都会被自动删除。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 513 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信