我以“-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
^ a d表示按Ctrl + a然后按d。
版本
CentOS release 5.5 (Final)
Screen version 4.00.03 (FAU) 23-Oct-06
答案 0 :(得分:8)
编辑:这个问题的最佳答案是this other SO answer。无论如何,我将我的kludgey解决方案留在这里,以防它解决类似的问题。
一种可能的解决方法是使用第二个已经运行和分离的屏幕会话来启动要在附加模式下发送“stuff”命令的屏幕会话,然后向该屏幕会话发送一个detach命令,然后东西命令。
$ 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"
(注意:加倍的“屏幕”是而不是一个错字!)你仍然留下了一个无法解决的屏幕会话(spawner),但如果所需的资源很重要,你可以随时使用“杀死-TERM ......“或者它的终止它(或者让它在一定时间后通过像
这样的东西自动退出$ screen -dmS spawner bash -c "sleep 60"
或类似的。)
答案 1 :(得分:0)
您是否考虑过使用tmux
?它更适合非交互式任务。
答案 2 :(得分:0)
感谢Ron Kaminsky。
我找到了另一种杀死'spawner'屏幕的方法
$ 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 screen screen -S spawner -dR
$ sleep 1 # may be necessary
$ screen -S spawner -X detach
$ screen -S spawner -X kill
答案 3 :(得分:0)
screen -d -m / bin / bash“test.sh”
屏幕(分离)(移动)(shell)“执行什么”
$ screen -d -m /bin/bash "test.sh"
$ screen -li
There is a screen on:
8540..Satelite (10/17/2013 04:53:22 AM) (Detached)
1 Socket in /var/run/screen/S-matt.
答案 4 :(得分:-1)
使用.screenrc文件,您可以设置要开始的东西;
screen -t <title> <window position> <command>
所以,如果您想在top
窗口中启动7
,那么
screen -t window7top 7 top