从rc.local启动时运行一个屏幕会话
我试图在启动时在rc.local中的特定用户下运行分离的屏幕。 下面的代码是我到目前为止所做的,但它对我不起作用。 su部分似乎给了我一个错误。
su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
我认为-c
参数( su
和bash
)必须至少引用。
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 screen
的Ctrl + A.
它允许将窗口分成几乎任意数量的窗格(垂直和水平),其配置文件格式(包括状态标准格式)实际上是人类可理解的。 当然,当你只想运行一些原本不是在后台编写为守护进程的程序/脚本时, tmux
和screen
一样好。 但是,如果您打算与终端多路复用器进行交互,我热烈推荐使用tmux
。
尝试使用sudo -u username
而不是su - username
这是我用过的,我发现它是最干净,最简单的(我自己测试过):
将“user”替换为用户以将其运行为。 将“nameyouchoose”替换为屏幕会话的名称将“/script/start.bash”替换为脚本的路径。
/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash
来源: http : //realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles