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

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

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

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

16 голосов | спросил birch 10 AM00000060000005331 2014, 06:40:53

2 ответа


7

Если ваша система имеет 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 в /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. Готово.
ответил Braiam 10 PM000000100000004931 2014, 22:27:49
6

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

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

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

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

ответил Giulio Muscarello 10 PM00000050000001631 2014, 17:13:16

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132