1

私はこの関連する質問を使用できると思いました:プロセスが停止した場合にプロセスを再開するためのbashスクリプトを作成するにはどうすればよいですか?@lhunathは素晴らしい答えを持っていて、それについて私がするかもしれないすべてが間違っていたと私に言いました、しかし私はデーモンプロセスを再開しています、そして私がうまくいく単一のスクリプトで何かできることを望んでいるなら。

私のプロセスは、起動ログを表示するキックオフスクリプトで始まりますが、その後終了し、プロセスをシェルから実行したままにします。

>sudo ./start
R CMD Rserve --RS-conf /var/FastRWeb/code/rserve.conf --vanilla --no-save
...
Loading required package: FastRWeb
FastRWeb: TRUE
Loading data...
Rserv started in daemon mode.
>

プロセスは稼働中です、

ps -ale | grep Rserve 1 S 33 16534 1 0 80 0-60022 poll_s?00:00:00 Rserve

bashから「start」スクリプトをラップまたは呼び出す簡単な方法はありますか?プロセスが終了したときに再起動しますか、これはPIDファイルが実際に呼び出される場合ですか?

Dang-stackoverflowで閉じられなかった非常によく似た質問を指した後でも、質問は閉じられました。あなたたちは吸う

4

2 に答える 2

2

プログラムを監視する非常に簡単な方法は、cronを使用することです。プログラムがまだ生きているかどうかを毎分(またはそれくらい)チェックし、./startそうでない場合はチェックします。

ルートとして、を呼び出しcrontab -eます。

次のような行を追加します。

* * * * * if ! pidof Rserve 2>&1 >/dev/null; then /full/path/to/start; fi

このメソッドは永続的です。つまり、再起動後などに実行されます。これが目的でない場合は、シェルスクリプトに移動します。

#! /bin/bash
# monitor.sh
while true; do
  if ! pidof Rserve 2>&1 >/dev/null; then /full/path/to/start; fi
  sleep 10
done

このスクリプトはコマンドラインから手動で開始する必要があり、Ctrl-Cで簡単に停止できます。

于 2012-10-13T22:58:25.553 に答える
1

プロセスを実行できる場合の最も簡単な解決策は、非デーモンモードであり、スクリプトでラップすることです。

#!/bin/bash
while (true)
do
  xmessage "This is your process.  Click OK to kill and respawn"
done

編集

/var/lock多くのデーモンは、PIDを含むロックファイルを(通常はに)残します。これにより、デーモンの複数のコピーが実行されなくなります。

/procLinuxでは、徹底的に調べて、そのプロセスがまだ実行されているかどうかを確認するのはかなり簡単です。

ps他のプラットフォームでは、プロセスの存在を確認するためにゲームをプレイする必要がある場合があります。

于 2012-10-13T22:36:15.893 に答える