我试图强迫GNU屏幕创建一个“虚拟”终端,而不附加它,在脚本内部执行脚本,并且在脚本结束后不终止会话。
我尝试了许多组合,包括:
screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh
要么
screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh
他们都没有工作。我要么获得没有执行脚本的会话,要么执行脚本,但是会话一旦完成就终止,或者出现“找不到屏幕会话”错误。
我基本上想做的是运行用PHP编写的UDP侦听器,并使它在无限循环中工作(不要中断侦听)。是的-我可以&
在末尾运行PHP脚本,强制PHP CLI作为守护程序运行。问题是,我正在使用一块称为服务器的垃圾(QNAP-永远不要购买此垃圾!),这似乎没有理会。一旦注销SSH会话,脚本就会停止。
因此,screen
似乎是唯一的选择。但是我不明白,为什么一旦执行的命令或脚本结束,它就会终止会话?
编辑:我也尝试过在互联网上找到的示例:
screen -dmS name
screen -S name -p windowname -X stuff 'mc
'
不缺!附加到(screen -R name
)后,我看到Midnight Commander HASN尚未执行。尽管示例作者说过,但是会的。
那么...有没有办法打开两个窗口(仅使用命令行,不使用键盘组合),一个窗口执行脚本,第二个窗口防止
—
trejder 2012年
screen
关闭?顺便说一句:我仍然不明白这个想法!如果调用screen -dmS name
,我将创建一个独立的窗口,该窗口也无事可做。但是它不会自动关闭!但是,当我想在该分离的屏幕中执行某些操作时,一旦执行完成,操作便会结束。为什么?我在这里看不到逻辑。可以让窗口什么都不做,但是不能让窗口什么都不做然后又什么也不做吗?
在不指定命令的情况下启动窗口时,它不是 “什么也不做”。它正在执行的“操作”正在运行交互式外壳程序,该外壳程序只有在您手动退出后才会退出。
—
jw013 2012年
凉!感谢您的解释!那么……回到问题所在……一旦命令执行结束,有没有办法在独立的屏幕/窗口中运行命令而不结束该会话?另外,请查看更新的问题。谢谢。
—
trejder 2012年
该脚本正在执行两个用PHP编写的UDP侦听器。尽管两者都作为守护程序执行(
—
trejder 2012年
&
在末尾带有),但由于服务器(QNAP)的问题,它们在会话结束时被终止(有人告诉我,如果使用来执行,则它们不应在普通Linux上使用&
)。因此,我不希望在start_udp_listeners.sh
完成操作后执行任何操作,仅希望如何防止会话终止。只要不是,我的PHP侦听器就可以正常工作。
screen
仅创建一个窗口以运行单个命令。当命令退出时,窗口关闭并且screen
没有任何可做的事情,因此退出。