以前の記事で、 daemon
コマンドを使うとシェルスクリプトとかを簡単に
デーモンとして常時稼働させられるねーこれ便利ねーみたいな話を書きました。
認証エラーログを見て ipfw で ban するやつ - ほっしーの技術ネタ備忘録
そのデーモン化したいプログラムから stdout とかに出力したデータを ファイルに残しておく話です。
やり方は簡単で daemon
の引数に -o /var/log/hoge_console.log
とか書くだけ。
簡単ですね。
(ちゃんと)ログローテートもする
ただ、これだとログファイルが延々と増え続けて死にます(ストレージが)。 …いやイマドキなら死なないかな?
そんなときに使うのはもちろん、 newsyslog
ですね。
/etc
とか見てると、イマドキは .d
なディレクトリに設定ファイルを書くのが主流っぽいですね?
という訳で、 /usr/local/etc/newsyslog.conf.d/
に適当なファイル名+ .conf
で設定ファイルを書きます。
こんな1行。
/var/log/hoge_console.log root:wheel 644 10 100 * CEXp /var/run/hoge.pid
先頭はさっき daemon
の -o
に渡したファイル名。たぶんフルパスじゃないと死にそう。
で、ポイントになるのはオプション CEXp
の後ろに daemon
の PID ファイル名を書くこと。
これでローテートを行うときに SIGHUP
を送ってくれます。
なので、対応するように daemon
の引数には -H -P /var/run/hoge.pid
を追加します。
-H
を付けると daemon
が SIGHUP
を受け取ったときにこのファイルを開きなおします。
あと、似た引数で -p
だと子プロセス( daemon
から起動する方)の PID が書かれるので間違えないこと。
間違うとローテートしてからのログが消滅したりして悲しいことになります。