我有一些 Linux 设备需要设置。设置完成后,它们将位于远程位置,我将无法取回它们。我正在使用树莓派。 这些设备将运行多个脚本,这些脚本必须无限期地工作数月或数年。 在设备上运行的脚本:
- python
- bash (autossh)
到目前为止我做了什么:
定时任务
当设备启动时,会启动一个 bash 脚本:
@reboot sudo bash /home/user/Python/Python_bash_1.sh
有检查 Python 脚本是否正在运行的 bash 脚本:
#!/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 的最佳方式是什么? 是否有其他方法可以检查脚本是否正在运行并在未运行时重新启动?
谢谢,
最佳答案
有专门的工具可以解决这个问题。
- upstart 或 systemd 等现代初始化系统捆绑了此功能:您只需定义在出现故障时应重新启动服务
- 在旧系统上,您可以使用自定义软件,例如 daemontools或 supervisord
关于python - 在 Linux 上无限期运行脚本的最可靠方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26673556/