Linux の起動時に複数のスクリーン セッションを作成するにはどうすればよいですか?

Linux の起動時に複数のスクリーン セッションを作成するにはどうすればよいですか?

まず、起動時にコマンドを実行する最適な方法は cron ですか?suシェル スクリプトで使用して異なるユーザーを切り替えることはできますか? できる場合、その方法は?

screen起動時に複数の分離されたセッションを作成するにはどうすればscreen -A -m -d -S test ./script.shよいでしょうか? 動作するように見えますが、cron によって開始されたスクリプトで使用すると、起動後に実行されている画面セッションが表示されません。

コマンドの実行が完了すると screen セッションが閉じられるようですが、出力を確認できるように開いたままにしておくことはできますか?

ありがとう!

答え1

システムの起動時にコマンドを実行するには、@rebootcronでスケジュールを設定します。man 5 crontab詳細については、を参照してください。つまり、crontabの行は次のようになります。

@reboot screen -m ...

そのために は使用せずsu、コマンドを実行するユーザーの crontab にコマンドを配置します。 そうすれば、ユーザーは root の介入なしにコマンドを管理できます。 (ただし、セキュリティ上の理由から、システム ユーザーがコマンドを変更できないようにして、システム ユーザーとしてコマンドを実行したい場合は、 のようなものがsu -c /path/to/command www-data適し/etc/rc.localています。)

Screen は、コマンドが終了するとウィンドウを閉じ、最後のウィンドウが閉じられるとセッションを終了します。スクリプトの終了後にその出力を確認したい場合は、その後に別のコマンドを実行して入力を待ちます。たとえば、ウィンドウを押すまでウィンドウを開いたままにするには、次のようにしますEnter

screen sh -c './script.sh; read'

screen は限られた数の履歴行しか保持しないことに注意してください。script.sh時々対話が必要でない限り、出力をファイルにリダイレクトする方がよいでしょう。対話が必要な場合は、screen のlogコマンドを使用して出力をファイルに送信できます (入力が不要なときに screen セッションが終了しても問題はありません)。

答え2

やってみましたscreen -AmdS test bash -i ./script.sh

何が起こっているかと言えば、screen が起動してスクリプトを実行し、スクリプトが終了すると screen が終了するという動作だと思います。このbash -i部分は screen に bash を対話モードで起動するように指示し、bash にスクリプトを実行させます。スクリプトの実行が完了すると、bash はコマンド プロンプトで待機を続け、システムにログインしたら接続できるように screen セッションを開いたままにします。

答え3

必要なことを実行するスクリプトを作成します。 単一のコマンドのためだけにユーザーを切り替える場合は、 を使用してくださいsu -c。それ以外の場合は、別のスクリプトを作成してそれを呼び出します。

次に、起動時にコマンドを実行するには、スクリプトを実行するコマンドを/etc/rc.d/rc.local

関連情報