猿问

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

如果一个进程死了,我如何编写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


HUX布斯
浏览 514回答 3
3回答

UYOU

最简单的方法是使用文件中的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'当进程死亡时,它的所有文件描述符都会被关闭,所有锁都会被自动删除。
随时随地看视频慕课网APP

相关分类

Python
我要回答