从rc.local启动时运行屏幕会话


9

我试图在启动时在rc.local中的特定用户下运行独立屏幕。到目前为止,下面的代码是我所拥有的,但对我而言不起作用。su部分似乎给我一个错误。

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

Answers:


13

我认为两个-c参数(subash)都必须至少加引号。

su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"

-有望成为最后的,可能是不希望在这里(见man su)。


再说几句话。对于像您这样的单发命令,它sudo 可能是一个更好的选择,但不一定:

sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

特别是,您可以在一级使用较少的报价sudo

您要注意的另一件事是在特权上下文中执行没有绝对路径的命令。这适用于su(或sudo),也适用bash于命令中的路径。您使用正确screen

刚刚测试了以下内容,效果很好。我认为这-是您原始行中的主要问题:

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"

邪恶的一句话:你为什么不tmux试试?我最近换了,再也没有回头。我唯一需要立即更改的是前缀键组合,tmux默认情况下为Ctrl+ B-返回GNU screenCtrl+ A

它可以将您的窗口分为几乎任意数量的窗格(垂直水平),并且其配置文件格式(包括用于状态参数的窗格)实际上是人类可理解的。当然tmux,与screen仅在后台运行最初不是作为守护程序编写的某些程序/脚本时一样好。但是,如果您打算与终端多路复用器进行交互,我热烈推荐tmux


我会尝试一下。我正在运行的脚本使用绝对路径,所以您会推荐su还是sudo
ATLChris

1
sudo如果从已经是root的rc.local运行,则不是一个好选择,因为您会错过一个登录shell。附带说明一下/etc/init/tty1.conf-在此处用屏幕替换[a] getty。
13年

@aquaherd:这是我写书时要记住的,但不一定。真正的线索是通常的sudo su -... sudo(超级用户),su(切换用户)...关于.conf的好主意
0xC0000022L13

1
我不得不说,由于您的恶意言论,我为此+1。我喜欢它!它是屏幕的绝佳替代品,因为它可以迫使它开始新的会话。
量子物理学家

@aquaherd sudo可以使用很好地启动登录shell -i
muru


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.