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

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

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

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

答案1

我认为至少应该引用两个-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试试?我最近换了,从此再也没有后悔过。我唯一需要立即更改的是前缀组合键,默认tmuxCtrl+ B- 改回 GNUscreenCtrl+ A

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

答案2

这是我使用过的,我发现它是最干净和最简单的(我自己测试过):

将“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

答案3

以当前用户身份(rc.local = root)在新的分离屏幕中启动脚本:

screen -dmS <session name> <command>, 例子:

screen -dmS screenName bash /home/user/run.sh


从 rc.local 启动脚本如下user

runuser -l user -c 'screen -dmS screenName bash /home/user/run.sh'

答案4

尝试sudo -u username代替su - username

相关内容