Невозможно получить доступ к переменной оболочки в конфигурации crontab

Невозможно получить доступ к переменной оболочки в конфигурации crontab

У меня проблема с доступом к переменной оболочки во время выполнения задания 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
# ...

Связанный контент