Unison、systemd 和 logrotate

Unison、systemd 和 logrotate

我在 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
}

相关内容