我试图强制 GNU screen 创建一个“虚拟”终端,而不附加到它,在里面执行脚本并且一旦脚本结束就终止会话。
我尝试了很多组合,包括:
screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh
Run Code Online (Sandbox Code Playgroud)
或者
screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh
Run Code Online (Sandbox Code Playgroud)
他们都没有工作。我要么在没有执行脚本的情况下获取会话,脚本执行,但会话一旦完成就终止,或者我收到“未找到屏幕会话”错误。
我基本上要做的是运行用 PHP 编写的 UDP 侦听器,并使其在无限循环中工作(不要中断侦听)。是的——我可以&
在最后运行 PHP 脚本,强制 PHP CLI 作为守护程序运行。问题是,我正在使用一个名为 server 的垃圾(QNAP - 永远不要买这个垃圾!),它似乎忽略了这一点。一旦我注销 SSH 会话,脚本就会停止。
所以screen
似乎是唯一的选择。但我不明白,为什么一旦执行的命令或脚本结束它就会终止会话?
编辑:我也试过在互联网上找到的例子:
screen -dmS name
screen -S name -p windowname -X stuff 'mc
'
Run Code Online (Sandbox Code Playgroud)
不缺!附加到它 ( screen -R name
) 后,我看到午夜指挥官尚未被处决。尽管示例作者说,它会。
jw0*_*013 46
要在脚本完成后保持屏幕忙碌,只需在窗口中持续运行某些内容即可。那个“东西”最简单的选择可能是交互式 shell。这是一种方法(假设bash
选择交互式外壳):
screen -dmS session_name sh -c '/share/Sys/autorun/start_udp_listeners.sh; exec bash'
Run Code Online (Sandbox Code Playgroud)
-dm
: 在分离模式下启动屏幕-S
: 为屏幕设置会话名称以便以后更容易检索sh -c '...'
: 而不是简单地运行你的脚本,它会终止,sh -c
用来运行多个命令exec bash
: 脚本终止后,sh
上面的将切换到交互式 shell ( bash
),在外部终止它之前,它永远不会退出。screen
只要bash
实例还活着,它就会保持打开状态。 归档时间: |
|
查看次数: |
34440 次 |
最近记录: |