Запускать скрипт один раз в день с помощью systemd
13
Я хочу запускать скрипт резервного копирования через 10 минут после загрузки компьютера, но только один раз в день. Можно ли создать такие сценарии с помощью systemd?
Я не полностью понимаю ваши требования, пожалуйста, уточните. Я понимаю, что если вы перезагружаете свою машину несколько раз в день, скрипт должен запускаться только после первой перезагрузки, верно? Если ваша машина работает более 1 дня, должен ли скрипт запускаться последовательно?
Кшиштоф Адамски
Точно. Я буду делать резервную копию каждый день, независимо от того, как часто я перезагружаю свой компьютер.
Fu86
5
Если вы не зациклены на systemd, это именно то, для чего нужен анакрон.
Жиль "ТАК - перестань быть злым"
Я могу ошибаться, но нет простого способа настроить anacron для запуска скрипта только через 10 минут после завершения загрузки.
Кшиштоф Адамски
Это верно. Вот почему я в настоящее время использую анакрон и старое доброе в повседневной работе, такой какecho "obnam backup" | at "now + 10 minutes"
Соответствующий .serviceфайл запускается через 15 минут после загрузки, а затем каждый день, пока система работает. Если вы перезагружаетесь несколько раз в один и тот же день, вы можете просто сделать так, чтобы скрипт резервного копирования проверил mtime архива и пропустил его, если он меньше суток.
Я не думаю, что это возможно сделать полностью в systemd, так как он не отслеживает состояние между перезагрузками. Вы можете легко запланировать запуск чего-либо через 10 минут после загрузки и использования systemd.timerее OnBootSec=или OnStartupSec=.
Сам скрипт должен проверить, был ли он уже запущен сегодня или нет. Это может быть легко реализовано даже в bash, например:
Очевидно, эта проблема будет решена в будущих выпусках. По крайней мере, согласно этому письму в списке рассылки systemd-devel. До этого ты должен идти по хакерскому пути, предложенному Кшиштофом.
echo "obnam backup" | at "now + 10 minutes"
Ответы:
Смотрите
/lib/systemd/system/systemd-tmpfiles-clean.timer
:Соответствующий
.service
файл запускается через 15 минут после загрузки, а затем каждый день, пока система работает. Если вы перезагружаетесь несколько раз в один и тот же день, вы можете просто сделать так, чтобы скрипт резервного копирования проверил mtime архива и пропустил его, если он меньше суток.Также, если ваши резервные копии будут тяжелыми при вводе-выводе , может быть полезно прочитать о директивах IOScheduling * на man-странице systemd.exec (5) .
источник
Я не думаю, что это возможно сделать полностью в systemd, так как он не отслеживает состояние между перезагрузками. Вы можете легко запланировать запуск чего-либо через 10 минут после загрузки и использования
systemd.timer
ееOnBootSec=
илиOnStartupSec=
.Сам скрипт должен проверить, был ли он уже запущен сегодня или нет. Это может быть легко реализовано даже в bash, например:
источник
Если вы не зависали в течение 10 минут после загрузки, вы можете:
OnCalendar=daily
запускает каждую полночьPersisten=true
при загрузке, если был хотя бы один пропущенный запуск.источник
Очевидно, эта проблема будет решена в будущих выпусках. По крайней мере, согласно этому письму в списке рассылки systemd-devel. До этого ты должен идти по хакерскому пути, предложенному Кшиштофом.
источник