Я запустил свою работу 0 2 */1 * * /aScript >aLog.log 2>&1
в crontab как пользователь root, и, тем не менее, обнаружил, что env отличается от env пользователя root и поэтому испытывает другое поведение моих сценариев во время выполнения.
Попытка исправить - поместить команды экспорта в файлы rc.d, но все равно не появилась! Я заканчиваю тем, что помещаю команды экспорта в сам aScript .
Мой вопрос заключается в том, что есть лучший способ решить эту проблему? и почему env отсутствует, хотя он от того же пользователя 'root'? (Я модифицирую crontab, запустив crontab -e из корня)
linux
cron
environment-variables
бамбуковый
источник
источник
source
свой (bash) профиль.Ответы:
Cron всегда работает с почти пустой средой. HOME, LOGNAME и SHELL установлены; и очень ограниченный путь. Поэтому желательно использовать полные пути к исполняемым файлам и экспортировать любые переменные, которые вам нужны в вашем скрипте при использовании cron.
Есть несколько подходов, которые вы можете использовать для установки переменных окружения в cron, но все они равны установке в вашем скрипте.
Подход 1:
Установите каждую переменную, которая вам нужна, вручную в вашем скрипте.
Подход 2:
Источник вашего профиля:
. $HOME/.bash_profile
(или. $HOME/.profile
)(Обычно вы обнаружите, что вышеуказанный файл будет источником других файлов (например, ~ / .bashrc -> / etc / bashrc -> /etc/profile.d/*) - если нет, вы также можете получить их.)
Подход 3:
Сохраните переменные среды в файл (запустите от имени нужного пользователя):
Затем импортируйте через ваш скрипт cron:
Подход 4:
В некоторых случаях вы можете установить глобальные переменные cron в
/etc/default/cron
. Однако существует элемент риска, так как они будут установлены для всех заданий cron.источник
bash: SHELL=/bin/bash: No such file
Cron создает свою OWN оболочку с использованием, указанным для ее запуска.
Итак, если вы хотите сохранить ту же самую переменную своего пользователя, попробуйте запустить ее с вашим собственным пользователем, а не с пользователем root или любым другим пользователем.
Или
Лучший способ - экспортировать эти переменные в свой собственный скрипт.
источник
В RedHat CentOS вы можете установить /etc/rc.d/init.d/functions PATH по умолчанию для постоянной установки. /etc/rc.d/crond вызывает функции при запуске.
источник
У меня была похожая проблема на моем AWS. Разобрался вот так
дал мне
/usr/bin/local/python3
местоположениеа потом
источник