supervise service
supervise はディレクトリ service に移動し、./run を起動させます。 ./run が終了したら、./run を再起動させます。 ./run がすぐに終了したときに起動・終了の繰り返しを防ぐために ./run を起動させる前に1秒間待ちます。
ファイル service/down が存在すれば、supervise はすぐに は ./run を起動させません。 svc を使って ./run を起動させ、supervise へ別なコマンドを与えることができます。
supervise はディレクトリ service/supervise でバイナリ形式で状態の情報を保持します。そのディレクトリは supervise が書き込み可能でなければなりません。 状態の情報は svstat を使って読むことができます。
supervise は起動後にすぐに終了することがあります。service に必要なファイルが見つからない場合、あるいは 別の supervise が service ですでに動いている場合です。 supervise は一度でもうまく動いたら、kill されるあるいは特に終了の指示が出されるということが無い限り終了しません。 svok を使って、supervise がうまく動いているか調べられます。svscan を使って supervise プロセスの集まりを安全に開始できます。
バージョン 0.70 で加わったこと: supervise は ./run を起動させた後に1秒間待ちます。
#!/bin/sh exec clockspeedここの exec は sh に対し、clockspeed で自身を置き換えることを指示しています。これにより、svc を使って、clockspeed に直接シグナルを送ることができるようにしています。
サービスをバックグラウンドで走らせては「いけない」ことに注意してください。
#!/bin/sh # will be repeatedly restarted by supervise exec clockspeed &fghack を使って、自身をバックグランドにおくプログラムを supervise に監視させる(制御はしない)ことができます。
#!/bin/sh exec fghack inetd
root 権限があれば、 setuidgidを使って、別アカウントのもとでサービスを起動させることができます。
#!/bin/sh exec \ setuidgid qmaill \ multilog t ./main '-*' '+* status: *' =status
シェルのパイプラインを使うのは一般にはいいことでありません。
#!/bin/sh generate-crucial-data | save-crucial-datasave-crucial-data が起動に失敗すると、 generate-crucial-dataによりすでにパイプに出されたデータは 捨てられてしまうでしょう。 svscanを使えば、以下のようにsupervise下のプロセス群の パイプラインを安全に開始できます。 ./run には
#!/bin/sh exec generate-crucial-dataそして、./log/runには
#!/bin/sh exec save-crucial-dataとします。
./runで処理するために superviseにパイプで渡されるデータもあります。 多くのプログラムは TERM シグナルを受け取ると入力済の未処理データを 処理しないで捨ててしまうことに注意してください。 しかし、 multilog プログラムは 読み込んだ全データを終了前に処理するように念いりに設計されています。