Ubuntu Ubuntu Linux

Ubuntu Linux: команда работает в терминале, но не в cron

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Команда работает в вашем терминале Ubuntu, но не запускается из cron. Cron использует собственное минимальное окружение и рабочий каталог, а расписание зависит от времени и пользователя; эта задача не сводится к проверке доступности программы.

В этой статье
  1. Что означает проблема и кому подходит инструкция
  2. Возможные причины и отличительные признаки
  3. Диагностика и пошаговое устранение
  4. Как убедиться, что неисправность устранена
  5. Если результат не получен

#Что означает проблема и кому подходит инструкция

Команда работает в вашем терминале Ubuntu, но не запускается из cron. Cron использует собственное минимальное окружение и рабочий каталог, а расписание зависит от времени и пользователя; эта задача не сводится к проверке доступности программы.

#Возможные причины и отличительные признаки

Возможная причинаКак узнатьЧто делать
Разные PATH и каталогиCron не читает обычный интерактивный ~/.bashrc.В журнале command not found либо не находится файл по относительному пути.Использовать абсолютные пути и задать рабочую папку.
Другой пользователь и праваЗадание принадлежит root или другой учётной записи.Тест от пользователя cron воспроизводит отказ доступа.Уточнить владельца crontab и необходимые разрешения.
Задача стартует, но результат скрытВывод отправляется на локальную почту или теряется.Нет ожидаемого файла, но запуск cron в журнале есть.Настроить журнал и код завершения задания.

#Диагностика и пошаговое устранение

  1. 1. Выясните, чей crontab и какое расписаниеОткройте Терминал Ubuntu и введите crontab -l от того пользователя, под которым должна работать задача. Для системных заданий с разрешения администратора посмотрите /etc/crontab и /etc/cron.d; там есть отдельное поле пользователя. При no crontab for user сначала убедитесь, что задание хранится именно здесь.
  2. crontab -l ничего не меняет; служба cron может не устанавливаться на минимальной системе
    Linux · Терминал (Bash)Команда
    crontab -l ничего не меняет; служба cron может не устанавливаться на минимальной системе.
    id
    crontab -l
    systemctl status cron --no-pager
  1. 2. Сверьте реальное время запускаЗапустите date и timedatectl, сравните время и часовой пояс сервера с ожидаемым. В cron стандартная запись содержит минуты, часы, день месяца, месяц и день недели; нельзя вставлять шестое поле пользователя в пользовательский crontab. Если сервер выключен в момент задания, cron обычно не выполнит пропущенный запуск.
    Linux · Терминал (Bash)Команда
    Если команда журнала пуста, проверьте /var/log/syslog и настройку журнала системы.
    date
    timedatectl
    journalctl -u cron -b --no-pager -n 80
  1. 3. Проверьте программу в минимальном окруженииУкажите абсолютный путь к исполняемому файлу и входным данным. Обычная python в PATH терминала может оказаться виртуальным окружением, которое cron не видит. Чтобы найти полный путь, используйте command -v, прочитайте заголовок скрипта и сделайте тест запуска ровно от пользователя задания.
    Linux · Терминал (Bash)Команда
    Не запускайте рабочий скрипт повторно, если он отправляет письма, списывает средства или меняет базу.
    command -v python3
    pwd
    printf "%s\n" "$PATH"
  1. 4. Добавьте безопасную диагностику к одному заданиюСделайте копию crontab -l в отдельный файл, откройте crontab -e и временно направьте стандартный вывод и ошибки конкретной строки в личный защищённый файл журнала, например >> "$HOME/cron-job.log" 2>&1, если переменная HOME в вашей конфигурации известна. Полный путь и каталог журнала должны существовать. Не выводите секреты и личные данные в общедоступные файлы.
    Linux · Терминал (Bash)С осторожностью
    Редактирование расписания влияет на последующие запуски. Сохраните исходное содержимое.
    crontab -l > "$HOME/crontab.backup-whelp"
    crontab -e

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 5. Проверьте код завершения в безвредном тестеДля собственного скрипта добавьте временное диагностическое сообщение с датой и кодом возврата либо выполните безопасную тестовую команду date >> $HOME/cron-test.log в отдельной строке по ближайшей минуте. Уберите тест после подтверждения. Не используйте * * * * * для тяжёлого реального скрипта: он запустится каждую минуту.
    Linux · Терминал (Bash)Команда
    На рабочем сервере согласуйте тест, чтобы не породить повторные операции.
    date
    ls -l "$HOME"
  1. 6. Проверьте одну плановую попытку и верните настройкиПосле наступления времени запуска прочтите журнал своей задачи, проверьте ожидаемый файл/результат и время последней записи. При успехе удалите временное диагностическое задание и восстановите нормальную частоту. Если cron показывает запуск, а бизнес-действие не выполнено — проблема внутри программы или в доступе к ресурсам, а не в планировщике.
  2. Если файла нет, проверьте путь вывода, пользователя и выполнение cron
    Linux · Терминал (Bash)Команда
    Если файла нет, проверьте путь вывода, пользователя и выполнение cron.
    tail -n 40 "$HOME/cron-job.log"
    journalctl -u cron -b --no-pager -n 40

#Как убедиться, что неисправность устранена

Исправление подтверждено только после автоматического запуска в нужное время от правильного пользователя и появления ожидаемого результата, а не после ручной команды.

#Если результат не получен

Не повторяйте опасные действия наугад. Сохраните точную формулировку ошибки, вывод диагностики без секретов, версию Ubuntu и данные о затронутом компоненте. Верните лишь собственные изменения из резервной копии; если затронута загрузка, диски или рабочий сервер, воспользуйтесь консолью восстановления либо помощью администратора.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.