#Что означает проблема и кому подходит инструкция
Команда работает в вашем терминале Ubuntu, но не запускается из cron. Cron использует собственное минимальное окружение и рабочий каталог, а расписание зависит от времени и пользователя; эта задача не сводится к проверке доступности программы.
#Возможные причины и отличительные признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Разные PATH и каталогиCron не читает обычный интерактивный ~/.bashrc. | В журнале command not found либо не находится файл по относительному пути. | Использовать абсолютные пути и задать рабочую папку. |
| Другой пользователь и праваЗадание принадлежит root или другой учётной записи. | Тест от пользователя cron воспроизводит отказ доступа. | Уточнить владельца crontab и необходимые разрешения. |
| Задача стартует, но результат скрытВывод отправляется на локальную почту или теряется. | Нет ожидаемого файла, но запуск cron в журнале есть. | Настроить журнал и код завершения задания. |
#Диагностика и пошаговое устранение
- 1. Выясните, чей crontab и какое расписаниеОткройте Терминал Ubuntu и введите
crontab -lот того пользователя, под которым должна работать задача. Для системных заданий с разрешения администратора посмотрите/etc/crontabи/etc/cron.d; там есть отдельное поле пользователя. Приno crontab for userсначала убедитесь, что задание хранится именно здесь. - crontab -l ничего не меняет; служба cron может не устанавливаться на минимальной системеLinux · Терминал (Bash)Командаcrontab -l ничего не меняет; служба cron может не устанавливаться на минимальной системе.
idcrontab -lsystemctl status cron --no-pager
- 2. Сверьте реальное время запускаЗапустите
dateиtimedatectl, сравните время и часовой пояс сервера с ожидаемым. В cron стандартная запись содержит минуты, часы, день месяца, месяц и день недели; нельзя вставлять шестое поле пользователя в пользовательский crontab. Если сервер выключен в момент задания, cron обычно не выполнит пропущенный запуск.Linux · Терминал (Bash)КомандаЕсли команда журнала пуста, проверьте /var/log/syslog и настройку журнала системы.datetimedatectljournalctl -u cron -b --no-pager -n 80
- 3. Проверьте программу в минимальном окруженииУкажите абсолютный путь к исполняемому файлу и входным данным. Обычная
pythonв PATH терминала может оказаться виртуальным окружением, которое cron не видит. Чтобы найти полный путь, используйтеcommand -v, прочитайте заголовок скрипта и сделайте тест запуска ровно от пользователя задания.Linux · Терминал (Bash)КомандаНе запускайте рабочий скрипт повторно, если он отправляет письма, списывает средства или меняет базу.command -v python3pwdprintf "%s\n" "$PATH"
- 4. Добавьте безопасную диагностику к одному заданиюСделайте копию
crontab -lв отдельный файл, откройтеcrontab -eи временно направьте стандартный вывод и ошибки конкретной строки в личный защищённый файл журнала, например>> "$HOME/cron-job.log" 2>&1, если переменная HOME в вашей конфигурации известна. Полный путь и каталог журнала должны существовать. Не выводите секреты и личные данные в общедоступные файлы.Linux · Терминал (Bash)С осторожностьюРедактирование расписания влияет на последующие запуски. Сохраните исходное содержимое.crontab -l > "$HOME/crontab.backup-whelp"crontab -eКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 5. Проверьте код завершения в безвредном тестеДля собственного скрипта добавьте временное диагностическое сообщение с датой и кодом возврата либо выполните безопасную тестовую команду
date >> $HOME/cron-test.logв отдельной строке по ближайшей минуте. Уберите тест после подтверждения. Не используйте * * * * * для тяжёлого реального скрипта: он запустится каждую минуту.Linux · Терминал (Bash)КомандаНа рабочем сервере согласуйте тест, чтобы не породить повторные операции.datels -l "$HOME"
- 6. Проверьте одну плановую попытку и верните настройкиПосле наступления времени запуска прочтите журнал своей задачи, проверьте ожидаемый файл/результат и время последней записи. При успехе удалите временное диагностическое задание и восстановите нормальную частоту. Если cron показывает запуск, а бизнес-действие не выполнено — проблема внутри программы или в доступе к ресурсам, а не в планировщике.
- Если файла нет, проверьте путь вывода, пользователя и выполнение cronLinux · Терминал (Bash)КомандаЕсли файла нет, проверьте путь вывода, пользователя и выполнение cron.
tail -n 40 "$HOME/cron-job.log"journalctl -u cron -b --no-pager -n 40
#Как убедиться, что неисправность устранена
Исправление подтверждено только после автоматического запуска в нужное время от правильного пользователя и появления ожидаемого результата, а не после ручной команды.
#Если результат не получен
Не повторяйте опасные действия наугад. Сохраните точную формулировку ошибки, вывод диагностики без секретов, версию Ubuntu и данные о затронутом компоненте. Верните лишь собственные изменения из резервной копии; если затронута загрузка, диски или рабочий сервер, воспользуйтесь консолью восстановления либо помощью администратора.