在Linux上无限期运行脚本的最可靠方法

时间:2014-10-31 11:24:16

标签: python linux bash shell raspberry-pi

我有一些我必须设置的Linux设备。一旦设置,他们将在一个偏远的位置,我将无法让他们回来。我正在使用树莓派。 这些设备将运行几个脚本,必须无限期地工作数月或数年。 设备上运行的脚本:

  • 的Python
  • Bash(autossh)

到目前为止我做了什么:

Cron职位

设备启动时,会启动bash脚本:

@reboot sudo bash /home/user/Python/Python_bash_1.sh

有一些bash脚本可以检查Python脚本是否正在运行:

#!/bin/bash
until python3 /home/user/Python/program_1.py; do
    echo "'program_1.py' exit code $?.  Program restarting.." >&2
    sleep 1
done

rc.local中

另一种选择是使用rc.local:

#SSH auto connection
autossh -M 10001 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /root/.ssh/rsa_rasp_dev_1 -R 6001:localhost:22 root@middle_ip_address -p 22 &
exit 0

使用-f选项和&符号(&)运行良好。

经过一周的测试和一些重新启动后,它看起来很可靠,但我不知道它是否会持续数月或数年。

我的问题是:

crontab和rc.local之间启动bash的最佳方法是什么? 是否还有其他方法可以检查脚本是否正在运行,如果不是则重新启动?

谢谢,

1 个答案:

答案 0 :(得分:1)

有一些特殊的工具可以解决这个问题。

  1. 现代初始化系统(如upstart或systemd)捆绑了这个系统:您只需定义应该在发生故障时重新启动服务
  2. 在较旧的系统上,您可以使用自定义软件,例如daemontoolssupervisord