Я хотел бы автоматизировать очистку zpool на моем ZFS-сервере. Я написал следующую Systemd службу в качестве /etc/systemd/system/zfs-scrub.service
)Управление сглаживанием ZFS через systemd
[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 не знает, что сервис завершен.
- Я что-то пропустил? Должен ли я вместо этого писать сценарий, запускающий скраб, greps строка состояния zpool и сигналы catch, чтобы остановить скраб, когда systemd сигнализирует об этом?
- Можно ли написать строку
OnCalendar
, что означает «один раз в месяц, только по выходным»?
Я выбрал 'simple' over' oneshot', потому что zpool scrub не останется вокруг (он просто запускает очистку и выходы). Дело в том, что нет текстовой отчетности, когда вы запускаете scrub (возможно, коды выхода, но я не проверял), кроме времени grepping zpool, чтобы получить статус/прогресс, и я не хотел писать обертку , – tiennou
Я понимаю, что вы имеете в виду. Для чего это стоит, то, что я показал выше, в значительной степени использует то, что я использую как на моем сервере, так и на основной рабочей станции (хотя я модифицировал таймер в соответствии с вашими требованиями). У меня не было проблем, хотя я не знаю, как получить прохождение скраба, кроме как через 'zpool status'. – airhuff