【发布时间】:2020-06-04 20:05:57
【问题描述】:
我正在尝试编写一个 bash 脚本,它在某些条件下启动一个外部 python 脚本。
目标是避免等待 python 脚本完成,而是等待延迟(例如 30 秒),如果 python 脚本仍在运行,则将进程发送到后台。
非常简化的python脚本示例:
#!/usr/bin/python
import time
time.sleep(120)
在这种情况下,我希望 bash 脚本启动 python 脚本,等待 30 秒,然后将 python 进程发送到后台(就像nohup example.py & 一样)。
如果 python 脚本在 30 秒延迟期间崩溃,错误消息应显示在终端上。
我无法修改 python 脚本。
有没有可能以干净的方式做到这一点?
我设法通过使用nohup / & 并将python脚本的输出重定向到一个临时文件来完成这项工作,并在30秒后读取该文件,以检查是否没有错误消息。
但我很想知道是否有更好的方法。
谢谢!
【问题讨论】:
-
嗯,不。我不希望在延迟后终止进程。如果它仍在运行,我只想让它进入后台。这是一个非常具体的 python 脚本,我知道它只会在第一秒内崩溃。那么执行时间可能需要几天。
-
是的,我看到你实际上想做与接受的答案相反的事情。我确实认为从前台开始是一种错误的方法。所以你想要这样的东西吗?
while :; do python foo.py & pid=$!; sleep 30; kill -0 $pid && break; done。这将启动 foo.py,等待 30 秒,看看它是否还活着,是否不重复。 -
您需要提供更多详细信息。比如,为什么你希望这是一个脚本而不是
.bashrc文件中定义的函数?这会成为更大剧本的一部分吗?发送到后台的程序是否会在 30 秒后向终端打印任何内容?它是否必须在调用后的前 30 秒内处于前台?你想在那个时期能够与它互动吗?您自己提出的 nohup 解决方案有什么问题?