Как запускать скрипт только один раз в день с помощью cron без указания времени выполнения

Я хочу запускать скрипт резервного копирования один раз в день, но не хочу указывать определенное время, только один раз в день. Я читал, что атрибут @daily cron запускается каждый день в 00:00, но я не знаю, будет ли в данный момент запущен принимающий сервер.

Можно ли настроить cron на запуск этого сценария только один раз в день, независимо от времени? Или запускайте сценарий до тех пор, пока он не выполнится успешно, а затем повторите попытку на следующий день?

@reboot может быть вариантом, однако отправляющая сторона может перезагружаться несколько раз в день, и в этом случае это приведет к ненужным резервным копиям.

7
задан 8 September 2017 в 11:46

2 ответа

Можно хотеть использовать anacron.

Из его страницы справочника

NAME
       anacron - runs commands periodically

SYNOPSIS
       anacron [-s] [-f] [-n] [-d] [-q] [-t anacrontab] [-S spooldir] [job] ...
       anacron [-S spooldir] -u [-t anacrontab] [job] ...
       anacron [-V|-h]
       anacron -T [-t anacrontab]

DESCRIPTION
       Anacron  can  be  used  to  execute  commands periodically, with a frequency specified in days.  Unlike
       cron(8), it does not assume that the machine is  running  continuously.   Hence,  it  can  be  used  on
       machines  that  aren't running 24 hours a day, to control daily, weekly, and monthly jobs that are usu‐
       ally controlled by cron.

Сообщество Ubuntu HowTo: https://help.ubuntu.com/community/CronHowto

Используя anacron:

  1. Просто вставьте исполняемый файл сценария /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly или /etc/cron.monthly.

  2. Коснитесь файла сценария:

    sudo touch /etc/cron.daily/scriptfile
    

    (cron.daily если это - ежедневное задание).

Тестирование anacron:

sudo anacron -f -d
   -f     Force execution of the jobs, ignoring the timestamps.
   -d     Don’t fork to the background.  In this mode, Anacron will output
          informational  messages to standard error, as well as to syslog.
          The output of jobs is mailed as usual.

Anacron обменивается сообщениями в журнале:

grep anacron /var/log/syslog

Anacron удерживает метки времени /var/spool/anacron/. Если Вы удаляете cron.daily, cron.weekly или cron.monthly файлы оттуда, anacron будут ежедневно выполняться, еженедельные или ежемесячные сценарии при следующем запуске.

12
ответ дан 8 September 2017 в 11:46

Используйте @daily как есть, но также добавьте @reboot. @reboot запустит скрипт при загрузке.

@reboot /full_path/to/script

См. Ubuntu wiki cron для получения дополнительной информации.

0
ответ дан 8 September 2017 в 11:46

Другие вопросы по тегам:

Похожие вопросы: