Runningを使用して適切なロギングでサービスを設定することに問題があります。 runitのドキュメントと私が内部で見つけた他のリソースに従って作成したファイルとスクリプトの概要は次のとおりです。
私はdebianでrunitを使用しているため、次のようになります。
/etc/service/test
-> /etc/sv/test
へのリンク。
`/ etc/sv/testの下:
$ ls /etc/sv/test
finish log run
$ ls /etc/sv/test/log
config run
スクリプトrun
およびfinish
は非常に単純です。
root@data1:/etc/sv/test $ cat /etc/sv/test/run
#!/bin/sh
touch /tmp/pid
echo $$ > /tmp/pid
while true; do
date
sleep 3
done
root@data1:/etc/sv/test $ cat /etc/sv/test/finish
#!/bin/sh
kill `cat /tmp/pid`
また、log
scriptも非常に簡単です。
猫/ etc/sv/test/log/run
#!/bin/sh
exec svlogd -t /var/log/test
ディレクトリ/var/log/test
が存在し、サービスが実行されます。
$ sv s test
run: test: (pid 11547) 536s; down: log: 1s, normally up, want up
しかし、ログディレクトリは空です...何が欠けていますか?すべてのログ情報はどこにありますか?
また、すべてのスクリプトが実行可能であることを確認しました。
sv
が何らかの理由でロギングスクリプトを開始できないようです!
$ sv s test
run: test: (pid 14612) 5s; down: log: 0s, normally up, want up
ロギングスクリプトを停止するには、次のコマンドを発行する必要があります。
$ sv d test/log
質問とは関係のない問題がいくつかあります(coughpid files cough)しかし、適切な質問に取り組みましょう。
最初、ロギングはオプションです。ほとんどの場合、ロガーが必要になりますが、サービス定義にロガーがあることは難しい要件ではありません。
2番目、ロガーは事実上、サービスにスレーブ化されているため、./log
は、ロギングに必要な設定を保持します。
3番目、サービスを停止すると、ロガーは理由により実行されたままになります-サービスが終了するまで残りのデータをキャプチャするためにそこにあります。これは、サービスがダウンしたときだけでなく、サービスがクラッシュした場合のロギングデータの損失を防ぐために行われました。 サービスが停止している場合でも、ロガーが実行されるのは正常です。サービスを開始すると、新しいサービスインスタンスが既存のロガーに再接続されます。
4番目正解です。sv
コマンドで明示的に名前を付けることで、ロガーを停止できます。これは、既存のdaemontools
パラダイムと一致しています。
Fifth、svlogdプログラムの失敗を登録するための異常な必要性がない限り(非常にありそうにありません)、それを殺すことなどについて心配する必要はありません。ダウンするように通知するだけで、runsv
監視プロセスが終了します。PIDまたはkill
コマンドは必要ありません。
さらに質問がある場合は、 監視メーリングリスト に連絡することをお勧めします。これは、ノイズが少なく、知識のある人が多く、質問に答えることができます。読み取り専用ミラーは mail-archive.org にもあります。
だから、いくつかの試行錯誤の後、私は解決策を見つけました。
次のことに注意することが重要です。
/etc/sv/test
でサービスを監視し、/etc/sv/test/log
でログディレクトリを監視している場合、config
は/etc/sv/test/log/config
にあると予想されます。ただし、ファイルはsvlogd
を実行した場所から読み取られることに注意してください。つまり、ログスクリプトが/var/log/test
(svlogd
の最後の引数)で実行される場合、これが構成ファイルが予期される場所です。 var/log/test/config
Listアイテムに構成を記述します$ sv down test/log $ sv start test/log ok: run: test/log: (pid 21190) 0s