Вступить в клуб →
лёгкаявопросLinux и Bash

Скрипт бэкапа работает руками, но из cron падает с command not found

Скрипт бэкапа из интерактивной сессии отрабатывает без ошибок:

$ /opt/scripts/backup.sh
бэкап загружен в объектное хранилище

Его повесили в crontab пользователя deploy:

0 3 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1

Каждую ночь в логе одна и та же строка:

/opt/scripts/backup.sh: line 12: aws: command not found

В сессии which aws показывает /opt/tools/bin/aws, права на файл у deploy есть, путь добавлен в PATH через ~/.bashrc.

Почему из cron скрипт не находит утилиту?

  • Пользовательский crontab выполняется от имени root, а утилита в `/opt/tools/bin` доступна только пользователю deploy — нужно ставить её системно
  • Cron разрешает запускать только команды из белого списка `/etc/cron.allow`, и утилита `aws` в этот список не внесена администратором сервера
  • Задание выполняется неинтерактивной оболочкой: файлы профиля не читаются, `PATH` у cron минимальный, и `/opt/tools/bin` в него не попадает
  • Причина в перенаправлении `>> /var/log/backup.log 2>&1`: оно запускает задание в отдельном подпроцессе, окружение которого теряет пользовательские переменные

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела