为什么我的无限 shell 脚本偶尔会停止?

为什么我的无限 shell 脚本偶尔会停止?

我写了一个 python 脚本,我想无限期地继续运行。大部分时间它都在睡觉,但每隔一段时间它就必须苏醒过来进行一些操作。我需要让它在 EC2 实例上运行,并且在执行此操作时需要断开与终端的连接。

我认为这将是理想的解决方案:

#!/bin/bash

while true; do
  python monitor.py >>monitor.log 2>&1
  echo "monitor.py exited with code $?. Respawning.." >&2
  sleep 2
done

我运行这个文件,另存为monitor.sh,通过:

./monitor.sh >>monitor.log 2>&1 &

如果我一两天后回来并运行:

ps aux | grep monitor

我通常在输出中看到monitor.sh和monitor.py,但不总是。有时我两者都看不到。所以这两个进程都发生了一些事情。

预期的行为是,如果 monitor.py 由于某种原因退出(退出代码为 0 或其他),则回显的行应出现在日志文件中,并且 python 脚本应重新启动。

为什么不呢?这里可能发生了什么,我的脚本有时会停止。

请注意,当我运行 shell 脚本时,我在它的末尾添加了一个&,以便与我随后注销的终端断开连接。这可能是问题的一部分吗?

echo "monitor.py exited with code $?. Respawning.." >&2我从来没有在日志文件中看到 的结果,除非我自己专门杀死它(使用kill $pid_of_monitor.py)。当让其运行自己的课程时,日志文件中绝不会提示 python 脚本失败。我不知道从中得出什么结论。

相关内容