如何在屏幕上执行命令并分离?


75

如何获取屏幕以执行命令然后分离(即在单个脚本中自动执行,而不需要在最初启动脚本之外没有其他输入)?例如,我运行myscript.sh,它将自动启动屏幕会话,执行命令,然后分离。

Answers:


114

这是个简单的:

screen -d -m yourcommand

4
没有骰子。screen -d -m命令,screen -list说没有套接字,screen -r没有会话
darkfeline

1
找不到您的命令,或者在自动创建的屏幕环境中无法正常工作。尝试screen yourcommand不使用-dand进行操作,-m然后看看如何进行。
艾伦·库里

你说的没错。当命令完成时,屏幕终止,这与我的预期相反。但是您的答案确实有用。
darkfeline

3
您可以通过启用zombie屏幕中的选项来更改它。放入zombie xy您的~/.screenrc。也应该有可能仅zombie xy在一个会话中启用它b放入另一个文件并使用,-c file但由于某些原因,当我尝试使用它时不起作用。或者只是使用sh -c 'yourcommand;while :;do sleep 9999; done'
艾伦·库里

@AlanCurry,不,这对我也不起作用,即使该命令在屏幕上手动运行时运行完美(并且要花费几个小时)也是如此。
塞林2014年

47

要在屏幕中运行单个命令并分离,您可以尝试:

screen -dm sleep 10

要运行多个命令,请尝试:

screen -dm bash -c "sleep 10; myscript.sh"

请注意,程序终止时,屏幕(默认情况下)会杀死包含该程序的窗口。

如果您不想在脚本完成后exec sh终止会话,请在末尾添加,例如:

screen -dm bash -c 'sleep 5; exec sh'

要列出所有会话,请尝试:

screen -list

相关:启动Unix屏幕,运行命令,分离


2
这在Ubuntu 16.04上对我有用。除了为会话命名,以便稍后再返回,还添加-S sessionnamescreen -dmS MyLongRunningScript bash -c "..."
Dan Dascalescu

16

为了在后台启动名为“ sleepy”的新会话

screen -S sleepy -dm sleep 60

为了杀死“困”的会话

screen -S sleepy -X quit      

为什么它不起作用screen -S sleepy -dm "cd myfolder;sleep 60"
工具包

@Toolkit问题是您在命令中使用了引号,因此将其视为一个大命令。显然,由于分号,我们不能将其排除在引号之外。要解决此问题,请执行以下命令:screen -S sleepy -dm bash -c“ cd myfolder; sleep 60”
Jason Thompson

3
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'

0

当我按下控件c(sig int)退出我的程序时,这发生在我身上。它从所有bash一直退出。所以我发现它抓住了SIGINT。并防止退出最后一击。(需要输入exit才能退出)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"


example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ;  bash"

我发现使用cron在启动时运行nodejs程序很有用。并在启动时运行屏幕。在cron中有特殊事件语法@reboot事件

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.