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

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

如何让屏幕执行命令然后分离(即,在单个脚本中自动执行,除了最初启动脚本之外无需进一步输入)?例如,我运行 myscript.sh,它会自动启动屏幕会话,执行命令,然后分离。

答案1

这是个简单的:

screen -d -m yourcommand

来自屏幕使用手册

-d -m
以分离模式启动屏幕。这会创建一个新会话,但不会附加到它。这对于系统启动脚本很有用。

答案2

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

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 屏幕,运行命令,分离

答案3

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

screen -S sleepy -dm sleep 60

为了结束“困倦”的会议

screen -S sleepy -X quit      

答案4

当我按下 Control C(Sig Int)退出程序时,发生了这种情况。它会从所有 Bash 中退出。所以我发现这可以捕获 SIGINT。并防止从最后一个 Bash 退出。(需要键入 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 event

to edit cron, execute:
crontab -e

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

相关内容