Запускайте сценарій раз на день із системою


13

Я хочу запустити резервний сценарій через 10 хвилин після завантаження машини, але лише раз на день. Чи можливо створити такі сценарії з системою?


3
Я не повністю розумію ваші вимоги, будь ласка, поясніть. Я розумію, що якщо ви перезавантажуєте серверний серверний час на день, скрипт повинен запускатися лише після першої перезавантаження, це правильно? Якщо ваша машина працює більше 1 дня, чи слід сценарій виконуватись у наступні дні?
Кшиштоф Адамський

Саме так. Я буду робити резервну копію щодня незалежно від того, як часто перезавантажую комп'ютер.
Fu86

5
Якщо ви не повісили на systemd, саме для цього анакран.
Жил "ТАК - перестань бути злим"

Я можу помилятися, але немає простого способу встановити анакрон для запуску сценарію лише через 10 хвилин після завершення завантаження.
Кшиштоф Адамський

Це вірно. Ось чому я зараз використовую анакрон та добрий старий у, з щоденною роботою на кшталтecho "obnam backup" | at "now + 10 minutes"
Адріен Клер

Відповіді:


11

Дивіться /lib/systemd/system/systemd-tmpfiles-clean.timer:

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

Це запускає відповідний .serviceфайл через 15 хвилин після завантаження, а потім кожного дня, поки система працює. Якщо ви перезавантажуєтесь кілька разів за один і той же день, ви можете просто за допомогою скрипта резервного копіювання перевірити mtime архіву та пропустити цей запуск, якщо йому менше ніж день.

Крім того, якщо ваші резервні копії будуть важкими для IO, може бути корисним ознайомитися з директивами IOScheduling * на сторінці управління systemd.exec (5) .


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

1

Якщо ви не зависли 10 хвилин після завантаження, ви можете:

[Unit]
Description=...

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar=dailyзмушує його працювати щоночі опівночі Persisten=trueпід час завантаження, якщо був хоча б один пропущений пробіг.


0

Мабуть, це питання буде вирішено у майбутніх випусках. Принаймні відповідно до цього електронного листа в списку розсилки systemd-devel. До цього вам доведеться пройти хакерський шлях, запропонований Кшиштофом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.