web-dev-qa-db-ja.com

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

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

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

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

ありがとう!

3
Jacob Hawkins

システムの起動時にコマンドを実行するには、cronで@rebootにコマンドをスケジュールします。詳細については、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'

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

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

何が起こっているのかと思いますが、それはスクリプトを実行するscreenを開始し、スクリプトが終了するとscreenが終了します。 bash -i partは、インタラクティブモードでbashを起動し、bashにスクリプトを実行させるように画面に指示します。スクリプトの実行が完了すると、bashはコマンドプロンプトで待機し続け、システムにログインすると接続できるように画面セッションを開いたままにします。

2
Darth Android

やりたいことを実行するスクリプトを作成します。 1つのコマンドだけでユーザーを切り替える場合は、先に進んでsu -cを使用します。それ以外の場合は、別のスクリプトを作成してそれを呼び出します。

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

1
Kevin M