起動時に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
couldは、あなたのようなワンショットコマンドに適していますが、必ずしもそうではありません:
Sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
特に、Sudo
を使用すると、引用のレベルを1つ少なくすることができます。
もう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。
ウィンドウをほぼ任意の数のペイン(垂直and水平)に分割することができ、その構成ファイル形式(ステータスparのものを含む)は実際には人間にわかりやすいです。もちろん、もともとデーモンとして書かれていないプログラム/スクリプトを単にバックグラウンドで実行したい場合は、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