我在 systemd 下运行 unison 以保持本地和远程 NAS 同步。
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 配置为每天轮换日志一次:
# 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
并修改 logroate.conf 任务以添加 postrotate 选项:
/var/log/unison-borg.log {
...
postrotate /etc/logrotate.post.daily
}