私はローカルとリモートの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
}