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

标签 python linux bash shell raspberry-pi

我有一些 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 的最佳方式是什么? 是否有其他方法可以检查脚本是否正在运行并在未运行时重新启动?

谢谢,

最佳答案

有专门的工具可以解决这个问题。

  1. upstart 或 systemd 等现代初始化系统捆绑了此功能:您只需定义在出现故障时应重新启动服务
  2. 在旧系统上,您可以使用自定义软件,例如 daemontoolssupervisord

关于python - 在 Linux 上无限期运行脚本的最可靠方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26673556/

相关文章:

c - 对 `GlewInit' 的 undefined reference - OpenGL

linux - 如何在python中编写一个可以打开一个新的linux终端并自动执行源代码的脚本

python - 接收 bool 结果以查看 crontab 是否存在

python - Redis 示例给出 HTTP 400 : Bad request error

linux - 在 Docker 中的卷之间移动文件很慢

python - 错误:无法为使用PEP 517且无法直接安装的opencv-python构建轮子(在PATH中找不到cl)

linux - 获取长字符串中的特定子字符串

linux - Tex 发送另一个命令

python - pip install --upgrade sqlalchemy 超出最大递归深度

python - PairGrid 上的 Seaborn 相关系数