我想在ZFS服务器上自动执行zpool scrubbing。我已将以下systemd服务编写为/etc/systemd/system/zfs-scrub.service
)
[Unit]
Description=Scrub ZFS tank pool
[Service]
Type=simple
ExecStart=/bin/sh -c 'zpool scrub `zpool list -H -o name`'
RemainAfterExit=yes
ExecStop=/bin/sh -c 'zpool scrub -s `zpool list -H -o name`'
除了计时器(/etc/system.d/system/zfs-scrub.timer
):
[Unit]
Description=Run zpool scrub every 1st Saturday
[Timer]
OnCalendar=Sat *-*-* 22:00:00
在几个星期前开始它后,我检查了它是否表现。似乎systemd仍然认为服务正在运行,因此计时器没有运行。
似乎没有ExecStatus
,因此systemd不知道服务已完成。
OnCalendar
行,表示“每月一次,仅在周末”?答案 0 :(得分:0)
要回答您的第二个问题,以下内容可以理解为每个月的前七天在午夜过后一分钟运行,但前提是该日也是星期日。因此,它应该在每个月的第一个星期日运行。
OnCalendar=Sun *-*-01..07 00:01:00
关于你的第一个问题,看看期刊的内容会有所帮助,而不仅仅是确认它是通过zpool status命令运行的。我注意到您的服务单元不需要zfs.target。我也会把服务打成一个" oneshot"而不是"简单"。
编辑:这应该适合你,虽然你需要为每个池启动/启用:
尝试使用zfs-scrub @ .service文件:
[Unit]
Description=Scrub ZFS tank pool
[Service]
Type=oneshot
ExecStart=/bin/zpool scrub %i
然后这是你的zfs-scrub @ .timer文件:
[Unit]
Description=Run zpool scrub every 1st Saturday
[Timer]
OnCalendar=Sun *-*-01..07 00:01:00
然后,您将通过计时器启动服务:
systemctl start zfs-scrub@[pool name].timer
systemctl enable zfs-scrub@[pool name].timer