3

Если я планирую запускать задание на 3 часа дня каждый день, а его пропускают 3 дня подряд, выполнит ли Anacron его 3 раза, когда система снова начнет работать, или только один раз?

Если он запускается только один раз, есть ли способ запустить его несколько раз?

2 ответа2

2

Если вы хотите, чтобы программа запускалась столько раз, сколько было пропущено дней, пока система не работала, вы можете заключить свою команду в скрипт bash, как показано ниже, и использовать обычную ежедневную запись cron или anacron.

Начните с записи в файле, например, date.of.lastrun количества дней с начала эпохи (т.е. с 1 января 1970 года), когда программа последний раз запускалась. Вы можете получить это значение на сегодня с:

echo $(($(date +%s)/86400))

Когда cron запускает этот скрипт, он считывает это число из файла, вычисляет число на сегодняшний день и повторяет вашу команду до совпадения, обновляя файл каждый раз.

let today=$(date +%s)/86400
lastrun=$(<date.of.lastrun)
if [ ! -z "$lastrun" ]
then    while [ $lastrun -lt $today ]
        do    echo "run the command for $(($today-$lastrun)) days back"
              # do your command ...
              let lastrun+=1
              echo $lastrun >date.of.lastrun
        done
else          echo 'you need to: echo $(($(date +%s)/86400))  >date.of.lastrun'
fi
0

Это невозможно, однако вы можете преобразовать желаемое задание cron в CGI-скрипт, выполняемый Apache, а затем вызвать его с внешнего, более стабильного сервера.

В качестве альтернативы вы можете записать каждое выполнение задания в некоторый файл, а затем написать анализатор для такого файла журнала, который будет выполнять задание в течение пропущенных дней.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .