#Когда возникает проблема и к каким системам относится
Команда работает в терминале, но из cron не выполняется или даёт другой результат. Проверьте, кто запускает задание, есть ли исполняемый путь, рабочий каталог, время и доступ к журналу. Rocky Linux с cronie; задания запускаются от конкретного пользователя, поэтому окружение cron не совпадает с интерактивной оболочкой.
#Основные причины: как отличить одну от другой
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| В cron другой PATHИспользована команда без абсолютного пути | command not found в журнале задания | Указать абсолютные пути к программам |
| Иной рабочий каталог и средаСкрипт обращается к ./файлу, HOME или переменным профиля | В журнале No such file или пустое значение | Указывать явно каталоги и конфигурацию |
| cron не запускал заданиеНет cronie, некорректное расписание или пользователь | В журнале нет запуска CMD | Проверить службу и запись без изменения прав |
#Пошаговая диагностика и устранение неисправности
- Шаг 1. Уточните, какой пользователь создал заданиеВыполните команды в терминале того же пользователя. crontab -l показывает именно его таблицу; sudo crontab -l покажет задания root и может запутать. Если crontab отсутствует, проверьте установку cronie штатным способом.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
idcommand -v crontabcrontab -l
- Шаг 2. Проверьте службу cron на Rocky LinuxСистемная служба обычно называется crond.service. В status должно быть active, но это не доказывает, что отдельное задание успешно завершилось. Если inactive — сначала выясните, должна ли служба быть включена и кто её обслуживает.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
systemctl status crond.service --no-pagersystemctl is-enabled crond.service
- Шаг 3. Посмотрите, запускал ли cron нужную командуВ журнале ищите строки CROND, PAM, CMD и время. В зависимости от конфигурации записи могут оказаться в /var/log/cron или journald. Не храните пароль в строке cron, так как логи способны её показать.
- Терминал Rocky Linux; нужны административные праваLinux · Терминал (Bash)КомандаНужен sudoТерминал Rocky Linux; нужны административные права. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
sudo journalctl -b -u crond --no-pager -n 120sudo tail -n 60 /var/log/cron 2>/dev/null || true
- Шаг 4. Сравните путь и доступность программыВ crontab указывайте абсолютный путь к исполняемому файлу, например /usr/bin/python3, который найден командой command -v. Не полагайтесь на алиасы оболочки или автоматически подгружаемый ~/.bashrc.Linux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
command -v python3 || trueprintf "user=%s home=%s PATH=%s\n" "$USER" "$HOME" "$PATH"
- Шаг 5. Воссоздайте ограниченную среду для тестаТест ниже запускает только вывод окружения, не ваше приложение. env -i показывает, что при отсутствии HOME, PATH и LANG программа может вести себя иначе. Для теста реального задания создайте отдельный журнал и укажите реальные абсолютные пути.
- Терминал Rocky Linux; административные права не обязательныLinux · Терминал (Bash)КомандаТерминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
env -i HOME="$HOME" PATH=/usr/bin:/bin /usr/bin/env | sort
- Шаг 6. Проверьте расписание и строку заданияВ пользовательском crontab пять полей времени, затем команда; в /etc/crontab есть дополнительное поле пользователя. Не переносите строку между форматами без изменений. После редактирования crontab -e проверьте crontab -l; не добавляйте % без экранирования, так как cron его трактует специально.Linux · Терминал (Bash)С осторожностьюТерминал Rocky Linux; административные права не обязательны. Меняет настройки/состояние службы: сначала копия и возможность отката.
crontab -lcrontab -eКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Шаг 7. Запустите команду от имени того же пользователя и проверьте выводПроверьте абсолютные пути к скрипту и рабочим файлам, сделайте контрольный запуск вручную с теми же переменными. На следующий временной интервал сравните данные приложения и журнал, а не только факт появления строки CMD.
- Терминал Rocky Linux; нужны административные праваLinux · Терминал (Bash)КомандаНужен sudoТерминал Rocky Linux; нужны административные права. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
idls -l /путь/к/скрипту.shsudo journalctl -u crond --since "1 hour ago" --no-pager -n 60
#Как убедиться, что неисправность устранена
Задание выполняется в установленное время от нужного UID, его прикладной результат сохраняется и после выхода из терминала; журнал не содержит ошибок окружения.
#Если предложенный способ не сработал
Если cron запускает команду, но та не работает, сохраните её stdout/stderr в закрытый журнал, проверьте абсолютные пути, переменные и SELinux. Не запускайте задание от root лишь ради обхода прав.