CronJob кожні 25 хвилин


13

Хочу знати, чи є простіший спосіб ведення роботи кожні 25 хвилин. У cronjob, якщо вказати параметр хвилини як * / 25, він працюватиме лише на 25 та 50-ту хвилину кожної години

Відповіді:


15

Команда в crontab виконується за допомогою /bin/shтого, ви можете використовувати арифметичне розширення, щоб обчислити, чи рівний поточний хвилинний модуль 25 рівний нулю:

*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command

cronбуде виконувати весь цей запис кожні 5 хвилин, але лише в тому випадку, якщо поточна хвилина (в хвилинах з епохи) за модулем 25 дорівнює нулю, вона запуститься your_command.

Як уже зазначалося, 1 день не рівномірно ділиться на 25 хвилин, так що це не призведе до того , your_commandщоб запустити в той же час кожен день, але він буде працювати кожні 25 хвилин.


просто геніальний ...
Томаш

Зауважте, що при впровадженні cron з ISC принаймні вам потрібно буде уникнути цих% символів із зворотним нахилом.
Стефан Шазелас

@ StéphaneChazelas, хороший момент. Я пішов вперед і додав відхилення перед знаками відсотків, тому що, наскільки мені відомо, для цього потрібна кожна реалізація крона.
CODE-READ

7

Ваша найкраща ставка - бігти за 20 хвилин або 30 хвилин.

Наступним найкращим може бути натискання кожні 5 хвилин, а потім зберегти внутрішню кількість або часову позначку та запустити кожен 5-й тригер або якщо минуло 25 хвилин з моменту останнього запуску.

Складніше було б розробити правильний час для дня, починаючи з опівночі, і визнати помилку наприкінці дня. Це передбачало б дублювання запису на кронтабелі в різні години.

Складнішим, ніж це, було б відпрацювання часу протягом цілого місяця, що залучало б багато примірників запису на кронтаб, щоб охопити різні поєднання.

Нарешті, ви можете завжди реалізовувати свій власний демон, і це робити планування.


6

Я не маю прямого досвіду з цим, але, здається, fcron робить все, що хочеш, з коробки. Відповідно до його документації ви можете вказати частоти:

# Get our mails every 30 minutes 
@ 30 getmails -all 

# make some security tests every 48 hours of system up time, 
# force a mail to be sent to root even if there is no output 
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh

Де ви бачите тут 25 хвилин?
Філомат

Використовуючи fcron і @ 25 commandслід зробити трюк.
Калеб

Дякую Калебу. Я мав би створити пристосований приклад замість того, щоб підняти один прямо з документації.
che2cbs

2

Дозвольте коротко пояснити, в чому проблема. Введення 25 у поле хвилини викликає cronвиконання, коли хвилини поточного часу дорівнюють 25, тобто один раз на годину. Ви можете ввести список збігів, проблема полягає в тому, що 60 (хвилин години) не можна розділити на 25, тому вам потрібно додати кілька записів на основі години. Найменше звичайний кратний 60 і 25 - це 300, тобто 5 * 60., тож вам доведеться проїхати 5 годин до повернення до початкового старту. наприклад:

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35
...

Але ось знову: 24 (години на день) не ділиться на 5, найменше поширене кратне значення 5 і 24 - це просто 5 * 24 = 120. і так далі і далі ...


Можливо, відповідь мав би бути коментарем до оригінального питання.
Філомат

1

Ви можете грати з останнім часом модифікації файлу

  • Створіть невеликий сценарій (наприклад /usr/local/bin/age), який виведе вік файлу:

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

Ваш кронтаб виглядатиме так (якщо припустити, що 25 хвилин дорівнює 1500 секундам, якщо я правий)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

Зауважте, що я використовую /var/tmpзамість того, /tmpщо згідно з FHS, його не слід видаляти при відключенні / запуску системи.


-2

Я думаю, що наступне повинно працювати 0 0/25 * * *?


Згідно з моїми знаннями, вона працюватиме кожну хвилину.

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