Скрипт бэкапа работает руками, но из 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`: оно запускает задание в отдельном подпроцессе, окружение которого теряет пользовательские переменные
