Как запускать cronjob каждые 4 часа минус 1 секунда

Чтобы вернуться к 1 при достижении 800, вам придется пересчитать этот столбец как ((id - 1)% 799) + 1 , где % - оператор модуля:

$ awk '/^\/\// { $6 = (($6 - 1) % 799) + 1; print }' file
//address: 9050004 data: 1 id: 1 len: 0 size: 2
//address: 9050008 data: 1 id: 2 len: 0 size: 2
//address: 902e004 data: 1 id: 3 len: 0 size: 2
//address: 902e008 data: 1 id: 799 len: 0 size: 2
//address: 9096004 data: 1 id: 1 len: 0 size: 2
//address: 9096008 data: 1 id: 2 len: 0 size: 2
//address: 9097004 data: 1 id: 3 len: 0 size: 2
//address: 902e008 data: 1 id: 1 len: 0 size: 2
//address: 9096004 data: 1 id: 2 len: 0 size: 2
//address: 9096008 data: 1 id: 3 len: 0 size: 2
//address: 9097004 data: 1 id: 4 len: 0 size: 2

Обратите внимание, что в ожидаемом выходе id для адреса 902e008 равен 799. Это невозможно. если вы ограничиваете диапазон до [1, 799].

2
05.02.2017, 13:18
2 ответа

В crontab нельзя использовать секунды и отрицательное время. Просто подождите 59 секунд на 59-й минуте предыдущего часа. Пример crontab:

#
# minute  0-59
# hour    0-23
# dom     1-31
# mon     1-12 (or names)
# dow     0-7  (0 or 7 is Sun, or use names)
#
59 23,3,7,11,15,19 * * * sleep 59 && /bin/datadump
1
27.01.2020, 22:19

К сожалению, cron больше предназначен для распознавания образов, чем для арифметических операций, поэтому что-то вроде -1 0/4 * * * не сработает. Вы можете просто указать каждый час вручную с помощью запятой, поэтому мы надеемся, что это должно дать желаемый результат:

59 59 3,7,11,15,19,23 * * *

Запуск за секунду до часа слишком доверяет вашей базе данных, хотя . Я бы лично дал ему еще несколько секунд, чтобы завершить (иначе он все равно сбросит завтрашние данные).

0
27.01.2020, 22:19

Теги

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