是否可以知道屏幕会话内执行的脚本是否完成?该脚本可以通过键入来查看jobs
,我想screen session
在脚本完成时终止。我该如何执行此操作,或者可以让屏幕在脚本成功执行后自行终止吗?由于我一次运行 72 个屏幕会话,因此手动执行此操作并不方便。如果能以某种方式自动检查屏幕会话中作业的状态并将其打印出来stdout
,并screen
在其中运行的作业完成时终止会话,那就太好了。
答案1
您只需链接命令 1.your_script
和 2。kill this screen session
让它foo.sh
成为你的脚本。终止屏幕会话的命令是kill
。您使用 向屏幕会话发出命令screen -X
,使screen -X kill
shell/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