Вопрос или проблема
Пытаюсь использовать формат расписания crontab 1/5 * * * *, но он не работает. Если я использую простой 1 * * * *, все в порядке. Формат / ничего не делает.
В crontab эта строка будет работать:
1 * * * * echo “cron” >> /home/user/cron
(запускается в 1 минуту после часа)
Но это не работает:
1/5 * * * * echo “cron” >> /home/user/cron
(запускается каждые 5 минут, начиная с 1 минуты после часа)
Редактирование crontab загружается нормально. В почте нет сообщений об ошибках. При просмотре журнала видно, что рабочая строка выполняется CRON, но нерабочая строка не отображается.
Работаю на Raspberry Pi, Bookworm, Debian 12
Есть идеи?
Ответ или решение
Проблема, с которой вы столкнулись, связана с синтаксисом записи cron. Давайте разберемся с вашим выражением 1/5 * * * *
в crontab.
Объяснение синтаксиса
В cron выражение формата start/step
используется для указания начала и шага, но оно имеет свои особенности. В вашем случае 1/5 * * * *
интерпретируется как:
- Выполнять задачу каждые 5 минут, начиная с 1-й минуты каждого часа.
Для того чтобы добиться желаемого результата – запускать задачу каждые 5 минут, начиная с 1 минуты, вам необходимо использовать как 1
(для первой минуты), так и */5
(для шага). Вот как это должно выглядеть:
*/5 * * * * [ $(date +\%M) -eq 1 ] && echo "cron" >> /home/user/cron
Объяснение исправления
В этом выражении */5 * * * *
говорит о том, что задача будет выполняться каждые 5 минут. Однако также проверяется, является ли текущая минута равной 1 (при помощи $(date +\%M) -eq 1
). Это гарантирует, что ваша команда выполняется только в минуту, когда это необходимо.
Альтернативный вариант
Если вы хотите запустить команду в 1 минуту, 6 минут, 11 минут и так далее, можно просто прописать несколько временных интервалов:
1,6,11,16,21,26,31,36,41,46,51,56 * * * * echo "cron" >> /home/user/cron
Дополнительные рекомендации
-
Логиcron: Убедитесь, что у вас настроены логи для cron, это поможет вам понять, выполняется ли вообще ваша задача. Вы можете добавить
2>&1
в конце команды для перенаправления ошибок, например:*/5 * * * * echo "cron" >> /home/user/cron 2>&1
-
Проверка прав доступа: Убедитесь, что у пользователя, под которым запущен cron, есть права на запись в файл
/home/user/cron
. -
Место для записи: Проверьте, есть ли место на диске для записи в файл лога, это может также вызвать проблемы при выполнении задачи.
Проверив эти моменты и скорректировав ваш cron-выражение, вы должны решить проблему с его выполнением.