Unison、systemd、およびログロテート

Unison、systemd、およびログロテート

私はローカルとリモートのNASを同期状態に保つためにsystemdでunisonを実行しています。
systemd は次のように構成されます。

[Unit]
Description=NAS Unision service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=nas
ExecStart=/usr/bin/unison borg

[Install]
WantedBy=multi-user.target

~nas/.unison/borg.prfで以下を実行するようにunisonを設定しました。

# Keep repeating every 15 mins.
repeat=900

# Log to the file which will be rotated by logrotate.
log=true
logfile=/var/log/unison-borg.log

logrotate は、1 日に 1 回ログを回転するように構成されます。

# Rotation of the Unision logs
/var/log/unison-borg.log {
    dayly
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 644 nas nas
}

私の問題は、unisonが各反復でログファイルを開かないようで、logrotateがunsion-borg.log.1ログファイルを回転したときに更新を受信することです。

unison用のmanファイルには、「SIGUSR1を送信するとログファイルが閉じます。ログの回転を許可するためにログファイルが自動的に再開され、必要に応じて作成されます」と示されています。

systemdではどうすればいいですか?

答え1

/etc/logrotate.post.daily スクリプトを作成します。

#!/bin.sh
systemctl status nas-borg | awk '/Main PID/{ print "kill -10 " $3 }' | sh

そしてpostrotateオプションを追加するには、logroate.confタスクを修正してください。

/var/log/unison-borg.log {
    ...
    postrotate /etc/logrotate.post.daily
}

関連情報