在保持会话的同时运行连续的后台命令

在保持会话的同时运行连续的后台命令

我有一个想运行几次的 Python 脚本,我无法将其设置为转到它之后的命令,因为 Python 脚本最终会给出错误

nohup python3 em.py &&killall chrome && sleep 60 &&nohup python3 em.py&

这正是我想要的,但是由于第一个 python 脚本引发错误,其余脚本无法开始。

我尝试通过以下方法解决:

nohup python3 em.py ;killall chrome;sleep 60;nohup python3 em.py&
nohup python3 em.py ;killall chrome;sleep 60;nohup python3 em.py;

当我离开 SSH 会话(或 CTRL+C)时这些都会失败,我运行 Ubuntu 20,我该如何解决?

任何帮助都将受到赞赏。

答案1

了解em.py正在做什么以及如果失败如何可能会有所帮助,因为它可能会影响管道。

我在这里看到两个问题。

首先,nohupshell 命令作用于当前语句,而不是整行。因此,虽然您在调用中使用了 nohup em.py,但您不能在其他两个调用中使用。尝试运行一个带有 nohup 的 bash。我建议使用它,setsid因为它更可靠。

第二,退出时控制终端可能无法正确重置。您应该正确重定向 stdin/out/err。我发现这里有两个问题。

setsid $SHELL -c 'python3 em.py; killall chrome; sleep 60; python3 em.py' </dev/null >/tmp/em.out 2>&1 &

您还可以在终端多路复用器内运行命令,例如screen(1)tmux(1)以避免所有这些问题。

相关内容