让python脚本在unix后台运行

问题描述 投票:0回答:2

我有一个 python 脚本,我想在我的 UNIX 服务器上在后台执行。问题是我需要 python 脚本等待上一步完成,然后再继续下一个任务,但我希望我的工作在退出后继续运行。

我想我可以设置如下,但需要确认:

脚本的摘录如下所示,其中命令 2 依赖于命令 1 的输出,因为它在同一目录中输出编辑后的可执行文件。我想指出命令 1 和 2 不包含 nohup/& 。

subprocess.call('unix command 1 with options', shell=True)
subprocess.call('unix command 2 with options', shell=True)

如果当我像这样启动我的Python脚本时:

% nohup python python_script.py &

我的脚本会在后台运行吗,因为我明确没有将 nohup/& 放入我的脚本化 unix 命令中,而是在后台运行 python 脚本?

python unix subprocess nohup
2个回答
6
投票

是的,通过使用 nohup (无挂断)运行你的 python 脚本,当网络被切断时你的脚本不会崩溃,并且尾随的 & 符号将在后台运行你的脚本。

您仍然可以查看脚本的输出,nohup 会将 stdout 通过管道传输到 nohup.out 文件。您可以通过跟踪输出文件来实时处理输出:

$ tail -f nohup.out

关于 nohup.out 文件的快速说明...

nohup.out          The output file of the nohup execution if
                   standard  output is a terminal and if the
                   current directory is writable.

或在命令后附加 & 以将 python 脚本作为守护进程运行并跟踪日志。

$ nohup python python_script.py > my_output.log &
$ tail -f my_output.log

1
投票

您可以使用

nohup

  1. chomd +x /path/to/script.py
  2. nohup python /path/to/script.py &

或者

不要关闭终端,而是使用

logout
当你这样做时,它不是 SIGHUP
logout
,因此 shell 不会向其任何 child.children 发送 SIGHUP。

© www.soinside.com 2019 - 2024. All rights reserved.