脚本执行完毕后终止屏幕会话

脚本执行完毕后终止屏幕会话

我有一个需要一段时间才能运行的脚本,我正在使用屏幕来运行它。

ssh user@host screen -dm "python dostuff.py"

现在的问题是,如何确保 dostuff.py 完成执行后它会终止屏幕会话?无论是因为错误,还是正确终止。

答案1

这可能属于“解决方法”类别,但我能够通过将命令(示例中的“python dostuff.py”)放入 shell 脚本中,然后运行来实现我认为您的目标... screen -d -m "/path/to/that/script"

版本信息:

$ screen -v
Screen version 3.09.10 (FAU) 4-Sep-01

看起来我的系统上有一个相当旧的屏幕版本!也许屏幕的行为在更新的版本中更改为自动退出?

$ screen -ls
No Sockets found in /tmp/uscreens/S-username.
$ screen -dm "ls"
$ screen -ls
There is a screen on:
        32112694.ls     (Detached)
1 Socket in /tmp/uscreens/S-username.

(屏幕-r;退出)

$ screen -ls
No Sockets found in /tmp/uscreens/S-username.

$ cat runme
#!/bin/sh
sleep 6
ls > now

$ screen -d -m ./runme
$ ps -ef|grep sleep
 username 9633926  9437204   0 14:55:23  pts/1  0:00 grep sleep
 username 15532242 10223670   0 14:55:21  pts/6  0:00 sleep 6

(等待6秒)

$ screen -ls
No Sockets found in /tmp/uscreens/S-username.
$ ls now
now

在经历这个过程时我意识到的一件事是我的屏幕版本似乎期望在-dm;之后有一个会话名称。我必须将-d和分开-m才能传递命令参数。

尝试使用:

ssh user@host screen -d -m python dostuff.py

可以选择-S将会话命名为特定的名称。

相关内容