4

別のアプリケーションをループで実行し、死んだ場合に再起動するシェルスクリプトでデーモンを作成する方法が必要です。

  • SSHセッションから使用./myscript.shして実行すると、デーモンがすでに実行されている場合を除き、デーモンの新しいインスタンスが起動されます。
  • SSHセッションが終了すると、デーモンは存続します。
  • ./myscript -stop既存のデーモンを強制終了するパラメーター( )が必要です。

編集に関する注記-元の質問では、nohupおよび同様のツールを使用できないことが指定されていました。この人為的な要件は「XY質問」であり、受け入れられた回答は、実際には、OPが使用できなかったと主張したすべてのツールを使用しています。)

4

2 に答える 2

6

コメントの説明に基づいて、実際に必要なのは、子を実行し続け、終了するたびに再起動するデーモンプロセスです。ssh セッションで「./myscript.sh」と入力してデーモンを開始する方法が必要です。

#!/usr/bin/env bash
PIDFILE=~/.mydaemon.pid
if [ x"$1" = x-daemon ]; then
  if test -f "$PIDFILE"; then exit; fi
  echo $$ > "$PIDFILE"
  trap "rm '$PIDFILE'" EXIT SIGTERM
  while true; do
    #launch your app here
    /usr/bin/server-or-whatever &
    wait # needed for trap to work
  done
elif [ x"$1" = x-stop ]; then
  kill `cat "$PIDFILE"`
else
  nohup "$0" -daemon
fi

スクリプトを実行します。nohup でデーモン プロセスが起動されます。デーモン プロセスは、子プロセスが終了するのを監視し、終了すると再起動するループです。

デーモンを制御するために、デーモンを強制終了する-stopためにスクリプトが取ることができる引数があります。システムの init スクリプトの例を見て、エラー チェックが改善されたより完全な例を確認してください。

于 2012-08-19T12:25:03.450 に答える
2

最近「バックグラウンド化された」プロセスの pid は、$!

$ cat &
[1] 7057
$ echo $!
7057

forkbashのコマンドを知りません。bash がこの仕事に適したツールであると確信していますか?

于 2012-08-19T11:58:30.647 に答える