离开终端时,使用 nohup 启动的脚本被终止

离开终端时,使用 nohup 启动的脚本被终止

我需要在 ubuntu 服务器 (Amazon EC2) 上运行一些无限循环的 python 脚本。我非常喜欢使用 nohup 的想法,因为它很简单,而且我可以拥有 output.out 日志文件。我像这样启动脚本

nohup script.py > output.out & 

进程启动了。我用 jobs -l 检查一切正常。然后我关闭终端,用 jobs -l 重新登录检查进程,但我再也看不到它了。你能告诉我我做错了什么吗?

答案1

如果您更改会话(注销并返回),那么您就没有机会看到您的脚本作为作业。

尝试ps一下。

ps -u myuser

用实际登录名替换 myuser..

答案2

如果你的工作在使用时可见,jobs -l你可以使用以下命令将其从会话中删除:disown

保持脚本运行的另一种方法是使用该screen工具。

答案3

尝试重定向所有 I/O 流

nohup script.py < /dev/null > output.out 2> error.out &

答案4

冗长的解释
后台运行的进程(作业)总是绑定到特定的终端:

[11]用户@lab7-11:~> nohup ./test.sh > 退出&
[1] 39978

[11]用户@lab7-11:~> ps aux |grep 39978
用户 39978 0.0 0.0 106096 1156分/11   S 06:15 0:00 bash ./test.sh

当它绑定到终端时,您可以在jobs输出中看到它:

[11]user@lab7-11:~> jobs -l
[1]+ 39978 Running                 nohup ./test.sh > out &

关闭该终端后,你的工作成为守护进程并且不再与终端相关

[7]用户@lab7-11:~> ps aux |grep 39978
用户 39978 0.0 0.0 106096 1156        S 06:15 0:00 bash ./test.sh

因此,在此阶段,您可以按照@Archemar 的建议通过以下方式检查流程状态,ps但不能通过job

简短解释: 你的脚本是不是被杀死-它变成了守护进程。

相关内容