
私は Linux 初心者なので、かなり基本的な質問をしていると思います。Linux で継続的なプログラムを実行するにはどうすればいいでしょうか?
基本的に、私はウェブサイトのコンテンツを継続的にチェックするプログラムを持っています。このプログラムは数日間実行されます。このプログラムを実行したいコンピュータの管理者権限はなく、このコンピュータへの排他的アクセス権もありません。つまり、他のユーザーが物理的にログオンできるということです。さらに、計り知れない災害が起こらない限り、コンピュータは私のプログラムの実行中ずっと実行されます。
マシンに SSH で接続してプログラムを実行できることはわかっています。ただし、これを行うには 2 台目のマシンが必要になるため (これでは、私が行っていることの意味が薄れてしまいます)、タイムアウトの問題が発生するため、これは望ましくありません。
起動後に何らかの接続を確立せずに、プログラムをコンピューター上でリモートで実行する方法はありますか?
答え1
定期的にスケジュールされた間隔で実行する必要がある場合は、 を使用しますcron
(例: Web サイトを 1 時間に 1 回、または 1 日に 1 回、またはそれより頻繁または頻繁で、なおかつ任意に定義できないチェックする必要がある場合)。
しかし...コマンドを後で実行したい場合もあるでしょう。今すぐそのためにはデーモンを使用します。デーモンを使用するat
と、後日/後でコマンドを 1 回実行できます (たとえば、5 時になって家に帰りたいが、4 時間のプロセスがあり、それを夜中に実行するのが最適で、繰り返し実行されない場合など)。
すでに述べたように、今すぐに実行したいが、後で確認するためにそのセッションに再接続したくない場合は、 を使用します。/nohup
は後で確認するためのものです。screen
tmux
nohup
screen
tmux
答え2
次の 2 つのことを行う必要があります。
- でコマンドを実行します
nohup
。これにより、切断時にリモートマシンがコマンドを終了しなくなります。 - を追加して、コマンドをバックグラウンドで実行します
&
。これは厳密には必要ではありませんが、コマンドをブロックするのではなくシェルに戻り、通常どおり切断したり、他の操作を実行したりできます。
したがって、コマンドは次のようになりますcommand
。
nohup command &
答え3
nohup
プログラムとやりとりせずにプログラムを実行できる場合、つまり、すべての出力とエラー メッセージを後で参照できるファイルに書き込む場合など、これが間違いなく正しい方法です。ファイルをチェックして、プログラムの実行中に残されたエラー メッセージを確認してくださいnohup.out
(Michael、訂正ありがとうございます!)
プログラムの実行中に操作する必要がある場合は、GNUスクリーンおそらく、これがより良い方法でしょう。この方法を使うと、誰もコンピューターをシャットダウンしない限り、ログアウトした後も、その中で起動したプログラムとともに実行し続ける仮想端末を作成できます。チュートリアルはこちら使ってみて分かりました。