Linuxで自作のプログラムなどをデーモン化して/var/logにログ出力する

デーモン化

使いたいスクリプトなどを準備する。
次に /etc/systemd/system/ にファイルを作成。
ファイル名は hoge.survice とする。

[Unit]
Description = hoge daemon
After = local-fs.target network-online.target
ConditionPathExists = /usr/local/bin

[Service]
ExecStart = /usr/local/bin/hoge
Restart = always
Type = simple

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=hoge

[Install]
WantedBy = multi-user.target

大体の設定はファイルを見ればなんとなく分かりそう。 プログラムによっては先に何かが起動していないと失敗するものも多くあると思う。
[Unit]内のAfterはそのようなプログラムの為にある。
デーモン化したい場合、何かエラーがおきても再起動して欲しいので、[Service]のRestartはalwaysにしておく。

次にログ出力はここで指定。

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=hoge

ログ用の設定ファイルを作成

/etc/rsyslog.d/hoge.conf のようなファイル名で作成。
ファイル内で先ほどのSyslogIdentifierを使ってログを設定。

if $programname == 'hoge' then {
    action(type="omfile" file="/var/log/hoge.log")
}

これで

sudo systemctl enable hoge.service

をすれば登録されるので次回の起動時から動くはず。 ログは /var/log/hoge.log に出力される。