我需要在 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
简短解释: 你的脚本是不是被杀死-它变成了守护进程。