Как я могу начать cronjob через 1 час каждый день?

Мне нужно начинать cronjob каждый день, но через час каждый день. То, что я до сих пор работает по большей части, за исключением 1 дня в году:

0 0 * * * sleep $((3600 * (10#$(date +\%j) \% 24))) && /usr/local/bin/myprog 

Когда в день года будет 365, работа начнется в 5:00, но на следующий день (не считая високосного года) будет день года как 1, поэтому работа начнется в 1:00. Как я могу избавиться от этого углового случая?

3 Solutions collect form web for “Как я могу начать cronjob через 1 час каждый день?”

Мое предпочтительное решение заключалось в том, чтобы каждый час запускать работу, но сам скрипт проверял, пришло ли время запуска или нет, и выходите, не делая ничего 24 раза из 25.

кронтаб:

 0 * * * * /usr/local/bin/myprog 

в верхней части myprog :

 [ 0 -eq $(( $(date +%s) / 3600 % 25 )) ] || exit 0 

Если вы не хотите вносить какие-либо изменения в сам скрипт, вы также можете поставить «время для запуска» в записи crontab, но это делает длинную неприглядную строку:

 0 * * * * [ 0 -eq $(( $(date +\%s) / 3600 \% 25 )) ] && /usr/local/bin/myprog 

Если ваша система имеет systemd, вы можете использовать для этого события таймеров. Просто определите новую службу , которая должна содержать команду / задачу, которую вы хотите выполнить, а затем создайте событие таймера с опцией OnUnitActiveSec :

 [Unit] Description=daily + 1 hour task [Timer] OnUnitActiveSec=25h # run 25 hours after service was last started AccuracySec=10min [Install] WantedBy=timers.target 

Используйте одно и то же имя для файлов, за исключением того, что вместо .service вы используете .timer .

Синтезирующий:

  1. Создайте файл с именем job.service в job.service /etc/systemd/system/ .
  2. Заполните его необходимой информацией. Вы можете проверить конфигурацию, используя systemctl status job.service .
  3. Создайте файл с именем job.timer в /etc/systemd/system/ .
  4. Заполните его необходимой информацией:

     [Unit] Description=daily + 1 hour task [Timer] OnUnitActiveSec=25h # run 25 hours after service was last started AccuracySec=10min [Install] WantedBy=timers.target 
  5. Проверка таймера с использованием systemctl list-timers
  6. Готово.

Если вы не против использовать что-то другое, кроме cronjobs, я бы предложил менее известную утилиту. Просто напишите сценарий оболочки, который оба планируют запускать через 25 часов, а затем вызывает вашу программу. Это кажется самым чистым решением.
Например, вы можете записать это в ~ / script.sh:

 echo "bash ~/script.sh" | at now + 25 hours /usr/bin/yourprogram 

А затем просто запустите bash ~/script.sh один раз.

Благодаря @HalosGhost за идею планирования работы раз в 25 часов.

  • В crontab @reboot работает, но не работает
  • Запуск нескольких заданий cron, где одна работа занимает много времени
  • Cron Job не работает
  • Значение записи «* * / 1 * * *» cron?
  • Где пользователи cronjob
  • Есть ли способ поддерживать счет в кронтабе?
  • Запуск работы в рубине
  • Задание Cron не дает результата
  • Скрипт запускается вручную, но не из cron
  • Является ли перезапуск cron или crond необходимым после каждого добавления или изменения нового расписания?
  • Cronjob (ы) для нескольких пользователей
  • Как мне сделать «Hello World», чтобы попробовать использовать cron
  • Interesting Posts

    Как проверять информацию о структуре каталогов файла unix / linux?

    Как я могу исправить следующую ошибку зависимости библиотеки gmp при попытке установить Charm?

    Почему Bash игнорирует SIGINT, если его текущий управляющий ребенок справляется с этим?

    Оптимизация сервера NFS для максимальной производительности

    Переименовать подмножество файлов в каталоге

    Нужен скрипт, который генерирует файлы из слов в одном текстовом файле

    Вам нужно переустановить GRUB2, но мне нужно, чтобы я загрузился в загружаемую систему!

    Проблема маршрутизации с внутреннего интерфейса eth1 на внешний интерфейс ppp0

    преимущество выполнения команды bash

    как установить avxsynth на centos?

    Mysql log confusion

    GlusterFS как выполнить переход на другой ресурс (умный), если подключенный сервер вышел из строя?

    Что я должен установить в данный установочный префикс

    Два приложения должны привязываться к одному и тому же порту

    Требует ли Posix каких-либо устройств?

    Linux и Unix - лучшая ОС в мире.