У меня проблема с доступом к переменной оболочки во время выполнения задания cron. На самом деле я создал задание, которое печатает два значения переменной оболочки в env.output
файл.
Я пишу задание cron с помощью команды $ crontab -e
(без пользователя sudo).
Мой файл конфигурации crontab выглядит так:-
# varibales
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
/usr/games:/usr/local/games
[email protected]
HOME=/home/ubuntu
JOBS_PATH=${HOME}/cronjobs
# Jobs
* * * * * echo "$HOME and $JOBS_PATH" >> ${HOME}/env.output 2>&1
Итак, теперь, когда я вижу содержимое файла env.output
, я получаю этот вывод
/home/ubuntu and ${HOME}/cronjobs
что, как я и предполагал, не ожидалось.
Я хочу, чтобы мой вывод выглядел так:-
/home/ubuntu and /home/ubuntu/cronjobs
Предложите мне способ решения этой проблемы.
решение1
Это ограничение демона cron. Смотрите это изстраница руководства crontab:
Значение строки:нетанализируются на предмет замены окружения или замены переменных, поэтому строки типа:
PATH = $HOME/bin:$PATH
не будет работать так, как вы могли бы ожидать.
Вы можете обойти это, так как bash воспринимает тильду ( ~
) как замену $HOME
. Поэтому используйте:
JOBS_PATH=~/cronjobs
решение2
У меня возникла проблема с доступом к переменной оболочки
HOME
как определено в верхней части crontab, это не переменная оболочки, а переменная окружения.
Вы не можете ссылаться на переменные окружения в верхней части crontab, поскольку ни одна оболочка их не обрабатывает, и поэтому они не раскрываются (и интерпретируются буквально).
Вам придется установить JOBS_PATH
вручную:
# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...