web-dev-qa-db-ja.com

継続的なジョブをリモートで実行する

私はLinuxを初めて使用するので、おそらくかなり基本的な質問をしているでしょう。 Linuxで連続プログラムを実行するにはどうすればよいですか?

基本的に、ウェブサイトのコンテンツを継続的にチェックするプログラムがあります。このプログラムは数日間実行されます。このプログラムを実行したいコンピューターの管理者権限がなく、このコンピューターへの排他的アクセス権もありません。つまり、他のユーザーが物理的にログオンできます。さらに、いくつかの計り知れない災害を除けば、コンピュータは私のプログラムの全期間中実行されます。

マシンにSSHで接続してプログラムを実行できることを知っています。ただし、タイムアウトの問題は言うまでもなく、これを行うには2台目のマシンが必要になるため(これは私が行っていることのポイントを打ち負かします)、これは望ましくありません。

開始後に何らかの接続を確立せずに、コンピューター上でプログラムをリモートで実行する方法はありますか?

6
Anne Nonimus

定期的にスケジュールされた間隔で発生する必要がある場合は、cronを使用します(たとえば、1時間に1回、1日に1回、またはそれよりも多かれ少なかれ頻繁にWebサイトをチェックする必要がありますが、まだ任意に定義されていません)。

ただし...コマンドを実行できるようにするatデーモンを使用する場合は、今すぐではなく、後でコマンドを実行することをお勧めします。後の日時に1回(5時で家に帰りたいが、深夜に実行するのが最適な4時間のプロセスがあり、再発しないなど)。

Nohupscreentmuxが言及されていると言います。今すぐ実行したいが、再接続したくない場合は、Nohupを使用してください。そのセッションを後で確認します。 screen/tmuxは、後で確認するためのものです。

11
xenoterracide

あなたは2つのことをする必要があります:

  1. Nohupを指定してコマンドを実行します。これにより、切断時にリモートマシンがコマンドを終了するのを停止します
  2. &を追加して、バックグラウンドでコマンドを実行します。これは厳密には必要ありませんが、コマンドをブロックする代わりにシェルに戻るため、通常どおりに切断したり、他のことを実行したりできます。

したがって、コマンドcommandの場合:

Nohup command &
4
Michael Mrozek

Nohupは、プログラムを操作せずに実行できる場合、間違いなく正しい方法です。 たとえば、すべての出力メッセージとエラーメッセージを、後でアクセスできるファイルに書き込む場合。Nohup.outファイルをチェックして、実行中にプログラムが残したエラーメッセージを確認します(修正してくれてありがとう、Michael!)

プログラムの実行中にプログラムを操作する必要がある場合は、 GNU Screen がより良い方法かもしれません。誰もコンピュータをシャットダウンしない限り、ログアウトした後も実行し続ける仮想端末を、その中で開始したプログラムとともに作成できます。 これがチュートリアルです 私はそれを使用して見つけました。

4
Gaurav