Используйте переменные в путях в crontab

Используйте переменные в путях в crontab

Используемый мной файл crontab более сложен, но я разбил задачу на минимальный набор задач.

Мой crontab работает так:

mypath='/home/user/opt/script_home'
myscript='/home/user/opt/script_home/myscript.py'
* * * * * "$myscript"

Но не так:

mypath='/home/user/opt/script_home'
myscript="${mypath}/myscript.py"
* * * * * "$myscript"

Сообщение об ошибке в maildir:

/bin/sh: ${mypath}/myscript.py: No such file or directory

Интерпретатор Python доступен по ограниченной переменной cron $PATH, так что проблема не в этом.

Редактировать: Кроме того, если я запускаю crontab с помощью bash или sh, он работает без ошибок. (После удаления * * * * *, конечно)

Может быть, я упускаю что-то очень простое, но я уже некоторое время обдумываю это и ищу в интернете. Но пока мне не повезло с параметрами поиска. Crontab работает с уродливым использованием общего пути в нескольких позициях, но это нехороший код и поэтому он меня беспокоит. Пожалуйста, помогите мне выбраться из моих мучений =)

решение1

Короче говоря: это невозможно.

в соответствии сman 5 crontab

Строка значений не анализируется на предмет подстановок окружения или замены переменных, поэтому строки типа

PATH = $HOME/bin:$PATH

не будет работать так, как вы могли бы ожидать.

cronПарсер не такой мощный, как bashу .

решение2

Вы можете настроить эту переменную mypath в файле .bash_profile или .bashrc, тогда она будет доступна.

vi .bash_profile or vi .bashrc 

затем добавьте указанный ниже путь и сохраните

 mypath='/home/user/opt/script_home'

решение3

Поскольку cron не является ни интерактивным, ни оболочкой входа, ни .bashrc, ни .bash_profile не являются исходными файлами. Поэтому, если вы определите mypath в этих файлах, у вас не будет этой переменной при использовании cron. Насколько мне известно, единственный способ иметь ее в cron — это определить ее напрямую (т. е. без подстановок окружения или замены переменных, как было сказано ранее) в скрипте crontab.

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