Answers:
我认为两个-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
如果从已经是root的rc.local运行,则不是一个好选择,因为您会错过一个登录shell。附带说明一下/etc/init/tty1.conf
-在此处用屏幕替换[a] getty。
sudo su -
... sudo
(超级用户),su
(切换用户)...关于.conf的好主意
sudo
可以使用很好地启动登录shell -i
。
这是我使用过的,它是最干净,最简单的(经过我自己的测试):
将“ 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
su
还是sudo
?