我写了一个 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 脚本失败。我不知道从中得出什么结论。