【问题标题】:Restart python script automatically even when it crashes in Linux即使在 Linux 中崩溃,它也会自动重启 python 脚本
【发布时间】:2018-08-30 12:20:57
【问题描述】:

我有一个必须一直运行的 python 程序。如果由于某种原因它被停止了,我想自动重新启动它。我想有一个每 n 秒运行一次的 cron 并检查程序是否正在运行。我的 shell 脚本是这样的:

#!/usr/bin/env bash
CM_COMMAND=`ps aux| grep abc| grep def| grep sudo`
LEN_COMMAND=${#CM_COMMAND}
if[["$LEN_COMMAND" -le "5"]] 
then
    echo "start the python program"
fi
exit

运行此脚本时出现错误:my_prog.sh: line 4: $'if[[118\r -le 5]]\r': command not found'

这样做的替代方法是什么?我的脚本有什么问题?

【问题讨论】:

  • 一个问题是当有人运行 6 个任意的sudo 命令匹配你的greps 时,你的脚本将不会重新启动。
  • python 进程是否需要不断运行,或者以某个(更高频率)间隔调用它就足够了?它必须以多快的速度重新启动才能实现其目的?
  • ps aux| grep abc| grep def| grep sudo 如果 abc 是程序名称
  • 进程必须不断运行
  • 它必须一直不间断地运行。如果停止,则需要尽快重新启动。

标签: python linux shell scripting


【解决方案1】:

也许这会更健壮?

1) 在启动时保存进程的 PID:

{your_python_command} & echo $! >>/{some_folder}/your_app.pid

2) 如果找不到 PID,此脚本将检查并重新启动..

#!/usr/bin/env bash

PID=`cat /{some_folder}/your_app.pid`

if ! ps -p $PID > /dev/null
then
  rm /{some_folder}/your_app.pid
  {your_python_command} & echo $! >>/{some_folder}/your_app.pid
fi

3) 将其添加到 cronjob:

crontab -e

选择您的文本编辑器并在文件末尾添加这一行:

*/1 * * * * /{your_path}/{your_script_name}

退出并保存

(这将每分钟运行一次脚本,检查 crontab 手册以设置您的确切间隔)

【讨论】:

  • 如果你把它放在一个 cronjob 中,无论你把脚本放在哪里,它都会在重启时自动激活,尽管 cronjob 是 - 这就是你想要的吗?
【解决方案2】:

让它成为一项服务怎么样?在我看来,这是一个非常干净的解决方案。

有关如何操作的更多信息,您可以阅读this article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 2021-09-22
    相关资源
    最近更新 更多