Debian Debian 12Debian 13

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

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

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

Команда Debian работает в обычной оболочке, но та же строка из пользовательского crontab завершается ошибкой или не создаёт ожидаемый файл. Cron выполняет задания по своему расписанию и с сокращённым окружением; обычный профиль bash не является частью запуска по умолчанию.

В этой статье
  1. Когда возникает ошибка в Debian и какие условия важны
  2. Причины и как отличить их друг от друга
  3. Пошаговая диагностика и устранение
  4. Проверка результата и действия при неуспехе

#Когда возникает ошибка в Debian и какие условия важны

Команда Debian работает в обычной оболочке, но та же строка из пользовательского crontab завершается ошибкой или не создаёт ожидаемый файл. Cron выполняет задания по своему расписанию и с сокращённым окружением; обычный профиль bash не является частью запуска по умолчанию.

#Причины и как отличить их друг от друга

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

#Пошаговая диагностика и устранение

  1. 1. Проверьте владельца и место расписанияВ терминале Debian выполните id и crontab -l. Если вывод говорит no crontab for user, возможно, нужное задание находится в /etc/crontab или в /etc/cron.d: там есть дополнительное поле пользователя, которого нет в crontab -e. Не редактируйте расписания соседних учётных записей.
  2. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    id
    crontab -l
    systemctl status cron --no-pager
  1. 2. Сверьте часы, расписание и факт запускаПроверьте date и timedatectl. В записи cron пять полей времени, за которыми идёт команда; правила дня месяца и дня недели могут срабатывать по ИЛИ. Если сервер спал или был выключен, обычный cron не обязан запускать пропущенные события после включения.
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    date
    timedatectl
    journalctl -u cron -b --no-pager -n 90
  1. 3. Получите абсолютный путь программы и входных файловВ интерактивной оболочке выполните command -v и pwd, подставив имя исполняемой программы. Для Python с виртуальным окружением абсолютный путь обычно ведёт к конкретному python в каталоге проекта. Не используйте в расписании сокращения ~ и относительные пути без точного понимания HOME и cwd.
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    command -v ИМЯ_КОМАНДЫ
    pwd
    printf "%s\n" "$PATH"
  1. 4. Проверьте минимальное окружение без запуска опасной работыДля безопасной проверки собственного сценария откройте терминал под пользователем задания и запустите env -i с HOME и PATH, затем в отдельном тестовом сценарии только чтение. Если рабочий скрипт отправляет платежи, письма или меняет базу, повторно запускать его вручную нельзя.
  2. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    env -i HOME="$HOME" PATH=/usr/bin:/bin /usr/bin/env
  1. 5. Зафиксируйте исходный crontab перед исправлениемСохраните текущие строки расписания в файл внутри домашней папки, затем выполните crontab -e. В нужной строке укажите абсолютный путь к интерпретатору и самому скрипту, а также каталог в оболочке скрипта. Не меняйте частоту задачи одновременно с отладкой, чтобы не запустить её лишний раз.
    Linux · Терминал (Bash)С осторожностью
    Редактирование меняет расписание последующих запусков.
    crontab -l > "$HOME/crontab.backup-whelp"
    crontab -e

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

  1. 6. Организуйте ограниченный журнал ошибокДля одного собственного задания временно направьте stderr в приватный файл, созданный с правами владельца. Cron может отправлять вывод на локальную почту, которой на минимальном Debian нет, поэтому отсутствие писем не равно отсутствию выполнения. Не записывайте в журнал пароли или токены.
  2. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    umask 077
    touch "$HOME/cron-debug-whelp.log"
  1. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    crontab -l
    journalctl -u cron -b --no-pager -n 70
    ls -l "$HOME/cron-debug-whelp.log"
  2. 7. Дождитесь следующего запуска и проверьте результатСверьте время в журнале cron и в файле диагностики, проверьте реальный выходной файл и его владельца. Если скрипт не запускался, вновь проверьте расписание; если запускался и упал, изучите конкретную ошибку вместо произвольного назначения прав. После успеха удалите временное журналирование секретных данных.

#Проверка результата и действия при неуспехе

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

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

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

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