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

ATL*_*ris 12 command-line gnu-screen

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

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
Run Code Online (Sandbox Code Playgroud)

0xC*_*22L 13

我认为这两个-c参数 (subash) 都必须至少被引用。

su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
Run Code Online (Sandbox Code Playgroud)

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


再多说几句。对于像您这样的一次性命令来说sudo 可能是更好的选择,但不一定:

sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
Run Code Online (Sandbox Code Playgroud)

特别是,您可以使用sudo.

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

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

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Run Code Online (Sandbox Code Playgroud)

恶意评论:你为什么不tmux试试呢?我最近换了,再也没有回头。我唯一需要立即更改的是前缀组合键,它tmux默认为Ctrl+ B- 回到 GNUscreenCtrl+ A

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