「パイプの破損」により失敗したバックグラウンド ジョブを再開する方法

「パイプの破損」により失敗したバックグラウンド ジョブを再開する方法

バックグラウンド プロセスを実行していましたが、そのコマンドは「nohup nice」で始まります。通常 20 時間かかるため、夜間に実行していました。しかし、今朝、「書き込み失敗: パイプが壊れています」というメッセージが表示されました。おそらく、アイドル状態が長すぎる接続をサーバーが閉じたためでしょう。サーバーに再度ログインし、「jobs」コマンドを入力してもジョブがありません。プログラムを最初から実行するのではなく、中断したところから再開するにはどうすればよいでしょうか。

答え1

そのメッセージをどこで見たかによって異なります。ssh 経由でサーバーに接続していて、ローカル ターミナルでこれを見た場合、問題ありません。プロセスはおそらくリモート サーバー上でまだ正常に実行されています。現在のシェル セッションで実行中のプロセスのみが表示されるjobsため、では表示されませんjobs。サーバーに再接続した場合は、新しいセッションが開始されているため、jobs役に立ちません。実行してみてps aux | grep ProcessName、まだ実行中かどうかを確認してください。

または出力ファイルでこのメッセージが表示された場合nohup.out、再開できません。再開をサポートしているプロセスでない限り、再開できません。このエラーは、プロセスが停止したことを意味します。停止したため、プロセスは消えており、元に戻す方法はありません。

たとえば、入力ファイルを読み込んで出力を生成する場合、いつ停止したかを調べて、残りの行だけを入力として再度実行することができます。ただし、いつ停止したかの記録がないため、魔法のように再起動するように指示するトリックはありません。

関連情報