如何在bash或python中在Linux上生成分离的后台进程

时间:2015-04-15 21:47:56

标签: python bash subprocess fork daemon

我在Linux上有一个长时间运行的python脚本,在某些情况下,它需要执行一个命令来停止和重启自己。所以,我想有一个外部脚本(在bash或python中)执行命令来重启原始脚本。让我详细说明一下。

假设我有original_script.py。在original_script.py中,我有一个无限循环:

if some_error_condition:
    somehow call external script external.sh or external.py

假设我可以调用external.sh,它包含:

#!/bin/bash
command_to_restart_original_script

最后,我知道命令" command_to_restart_original_script"。这不是问题所在。 python命令需要什么才能以某种方式调用外部脚本external.sh"。我需要外部脚本(这是一个子进程)继续运行,因为父进程original_script.py正在重新启动,即我需要子进程被分离/守护进程。我该怎么做?

1 个答案:

答案 0 :(得分:3)

我在不同的地方找到了很多建议,但唯一对我有用的答案是: How to launch and run external script in background?

导入子流程 subprocess.Popen([" nohup"," python"," test.py"])

在我的情况下,我运行了一个名为longrun.sh的脚本,所以实际的命令是:

导入子流程 subprocess.Popen([" nohup"," / bin / bash"," longrun.sh"])

我使用此run.py测试了这个:

import subprocess
subprocess.Popen(["nohup", "/bin/bash", "longrun.sh"])
print "Done!"

我验证了(使用ps -ax | grep longrun)longrun.sh确实在run.py退出后很长时间内在backgreoun中运行。