我有一个需要一段时间才能运行的脚本,我正在使用屏幕来运行它。
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
将会话命名为特定的名称。