web-dev-qa-db-ja.com

rc.localから起動時にスクリーンセッションを実行する

起動時にrc.localの特定のユーザーでデタッチされた画面を実行しようとしています。以下のコードは私がこれまで持っているものですが、それは私のために働いていません。 suの部分はエラーを与えているようです。

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

-cパラメーター(subash)の両方を少なくとも引用符で囲む必要があると思います。

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

また、-は最後になると予想されるため、ここでは望ましくない場合があります(man suを参照)。


さらにいくつかのコメント。 Sudocouldは、あなたのようなワンショットコマンドに適していますが、必ずしもそうではありません:

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のものを含む)は実際には人間にわかりやすいです。もちろん、もともとデーモンとして書かれていないプログラム/スクリプトを単にバックグラウンドで実行したい場合は、tmuxscreenと同じくらい良いです。ただし、端末マルチプレクサと対話する場合は、tmuxをお勧めします。

12
0xC0000022L

Sudo -u usernameの代わりにsu - usernameを試してください

1
prophecy201

ここで私が使用したものは、私がそれが最もきれいで簡単であることがわかったものです(自分でテストしました):

「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

1
Areeb Soo Yasir