回答:
両方の-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'
特に、を使用すると、1つ少ないレベルの引用を使用できますsudo。
注意すべきもう1つのことは、特権コンテキストで絶対パスなしでコマンドを実行することです。これは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から実行する場合は、ログインシェルを見逃すため、これは適切な選択ではありません。サイドノートでは、見てい/etc/init/tty1.confここでは、画面に[A]のgettyを交換します- 。
sudo su -です... sudo(スーパーユーザーは行う)、su(ユーザーを切り替える)... .confについての良い考え
sudoは、を使用してログインシェルを正常に起動できます-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?