如何知道屏幕上的作业何时完成?

如何知道屏幕上的作业何时完成?

是否可以知道屏幕会话内执行的脚本是否完成?该脚本可以通过键入来查看jobs,我想screen session在脚本完成时终止。我该如何执行此操作,或者可以让屏幕在脚本成功执行后自行终止吗?由于我一次运行 72 个屏幕会话,因此手动执行此操作并不方便。如果能以某种方式自动检查屏幕会话中作业的状态并将其打印出来stdout,并screen在其中运行的作业完成时终止会话,那就太好了。

答案1

您只需链接命令 1.your_script和 2。kill this screen session

让它foo.sh成为你的脚本。终止屏幕会话的命令是kill。您使用 向屏幕会话发出命令screen -X,使screen -X killshell/bash 命令终止您当前所在的屏幕会话。您将

screen -S the_session_for_my_job

创建屏幕会话,然后您将

/path/to/foo.sh; screen -X kill

这将终止屏幕会话,与窗口数量无关,并将在 foo.sh 完成后执行此操作。

更复杂的方法是观察进程 ID,并在某个 PID 消失时发出终止命令。

让 12345 为您要监视的进程的 PID。那么你会

while ps a | grep ^12345;do sleep 2; done; screen -X kill

while 循环监视进程列表中是否有 PID 12345 的进程。如果存在这样的进程,它将休眠 2 秒,然后再次检查。如果不存在具有该 PID 的进程,则 while 循环终止。然后发出kill命令。

答案2

我使用带有以下内容的电子邮件:

command | mail-s job_output [email protected]; exit

或者,如果它已经在运行,您可以键入(如果有大量输出,则复制粘贴)命令以在完成后执行:

echo $STY done | mail -s job_done [email protected]; exit

相关内容