Я хочу запустити резервний сценарій через 10 хвилин після завантаження машини, але лише раз на день. Чи можливо створити такі сценарії з системою?
echo "obnam backup" | at "now + 10 minutes"
Я хочу запустити резервний сценарій через 10 хвилин після завантаження машини, але лише раз на день. Чи можливо створити такі сценарії з системою?
echo "obnam backup" | at "now + 10 minutes"
Відповіді:
Дивіться /lib/systemd/system/systemd-tmpfiles-clean.timer
:
[Timer]
OnBootSec=15min
OnUnitActiveSec=1d
Це запускає відповідний .service
файл через 15 хвилин після завантаження, а потім кожного дня, поки система працює. Якщо ви перезавантажуєтесь кілька разів за один і той же день, ви можете просто за допомогою скрипта резервного копіювання перевірити mtime архіву та пропустити цей запуск, якщо йому менше ніж день.
Крім того, якщо ваші резервні копії будуть важкими для IO, може бути корисним ознайомитися з директивами IOScheduling * на сторінці управління systemd.exec (5) .
Я не думаю, що це можливо зробити цілком у systemd, оскільки він не відстежує будь-який стан між перезавантаженнями. Ви можете легко запланувати щось, щоб запустити 10 хвилин після використання завантаження systemd.timer
та його OnBootSec=
або OnStartupSec=
.
Сам сценарій повинен перевірити, був він запущений сьогодні чи ні. Це можна легко реалізувати навіть у bash, наприклад:
#/bin/sh -x
FILE=/etc/lastrun
TODAY=`date +"%Y%m%d"`
LASTRUN=`cat $FILE`
[[ -z "$LASTRUN" ]] || [[ "$TODAY" -gt "$LASTRUN" ]] || exit
echo $TODAY > $FILE
RUNYOURSCRIPTHERE
Якщо ви не зависли 10 хвилин після завантаження, ви можете:
[Unit]
Description=...
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
OnCalendar=daily
змушує його працювати щоночі опівночі Persisten=true
під час завантаження, якщо був хоча б один пропущений пробіг.