この卑劣な bash スクリプトを 24 時間 365 日バックグラウンドで実行し続けるにはどうすればよいでしょうか?

この卑劣な bash スクリプトを 24 時間 365 日バックグラウンドで実行し続けるにはどうすればよいでしょうか?

重複しているように聞こえるかもしれませんが、まず聞いてください。

標準入力がアクティブで、起動時に入力が必要になることがあるシェル スクリプトを実行します。24 時間 365 日実行する必要がありますが、失敗した場合はコマンドを入力するか、プロンプトが表示されたら「y」を入力するだけで再起動する必要があります。すでに 2 つの方法を試しました。nohup を使用する方法と、Ctrl+Z をクリックする方法、bg を入力する方法のどちらも、ジョブが停止していて実行されていないと表示されます。実行したときだけfgアクティブになります。この問題を解決する方法はありますか?

PS 私も試してみましたが、scriptcommand &やはり「停止」で終わります。

これを systemd サービスとして設定するのは意味があるでしょうか?

答え1

あなたが説明したように入力に依存するプログラムは、次のような端末マルチプレクサ内で起動する必要がありますtmuxhttps://en.wikipedia.org/wiki/Tmux) またはscreenhttps://www.gnu.org/software/screen/)。ターミナル ウィンドウのテキスト ベース バージョンと考えてください。

を使っscreen my-programて開始しますmy-program。その後、切り離す仮想画面コンソールからキーの組み合わせCtrl- A Ctrl-を使用してD、開始したシェルに戻りますが、プログラムはバックグラウンドで実行され続けます。その後、 を使用してscreen -r仮想コンソールに再接続できます。

screen (およびプログラム) は、プログラムが終了するかサーバーが再起動されるまで実行され続けます。

tmux非常に似ていますが、オプションと機能が多く、使用するキーボードショートカットが異なります。

答え2

スクリプトをバックグラウンドで実行し続けるには、 nohup: を使用しますnohup scriptcommand &。理想的には、スクリプトには入力を求めないオプションがあります。何らかの理由でそれがオプションでない場合は、期待する'y'を入力するために使用できます。

スクリプト用のsystemdサービスを作成すると、システムの再起動時にスクリプトが起動されるようになります。また、Restart=alwaysサービスが終了または強制終了された場合にsystemdファイルでサービスを再起動することもできます。systemdのドキュメントに詳しい情報があります

関連情報