回答:
両方の-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
?