我以"-d -m"开头的任何会话都不接受"-X stuff [...]"命令,除非我已经连接到屏幕至少一次.没有错误消息,命令无法通过.
问题是我从cron作业启动会话,无法从cron内部附加到屏幕.
重复的步骤
$ screen -m -d -S mydaemon bash
$ screen -S mydaemon -X stuff "`printf "exit\\r"`"
$ screen -ls
32456.mydaemon (Detached)
$ screen -r -S mydaemon
$ ^a d
$ screen -S mydaemon -X stuff "`printf "exit\\r"`"
$ screen -ls
No Sockets found in /var/run/screen/S-user
Run Code Online (Sandbox Code Playgroud)
^ ad表示按Ctrl + a然后按d.
版本
CentOS release 5.5 (Final)
Screen version 4.00.03 (FAU) 23-Oct-06
Run Code Online (Sandbox Code Playgroud)
编辑:这个问题的最佳答案是其他答案.无论如何,我将我的kludgey解决方案留在这里,以防它激发解决类似问题的方法.
一种可能的解决方法是使用第二个已经运行和分离的屏幕会话来启动要在附加模式下发送"stuff"命令的屏幕会话,然后向该屏幕会话发送一个detach命令,然后发送stuff命令.
$ screen -dmS spawner
$ screen -S spawner -X screen screen -dR mydaemon
$ sleep 1 # may be necessary
$ screen -S mydaemon -X detach
$ screen -S mydaemon -X stuff "whatever"
Run Code Online (Sandbox Code Playgroud)
(注意:加倍的"屏幕" 不是拼写错误!)你仍然留下了一个无法解决的屏幕会话(spawner)但是如果它所需的资源很重要你总是可以使用"kill -TERM ..."或它的同类终止它(或者在一段时间之后通过类似的东西启动它自动退出它
$ screen -dmS spawner bash -c "sleep 60"
Run Code Online (Sandbox Code Playgroud)
或类似的).
| 归档时间: |
|
| 查看次数: |
9410 次 |
| 最近记录: |