Я хочу определить переменные среды в одном месте, которые будут доступны через crontab разных пользователей и из запущенной оболочки bash.
Как я могу написать его один раз в одном месте, чтобы он был доступен для всех упомянутых выше способов использования?
До сих пор я пишу для общесистемного bashrc в / etc / bashrc, а в crontabs я пишу это снова над определениями crontab
Я не думаю, что вы можете сделать это напрямую в crontab. Файл crontab не является сценарием оболочки, поэтому попытка передать в него сценарий, содержащий envvars, не работает.
. /path/to/envvars
crontab не установит это, так как он недействителен
crontab: installing new crontab
"/tmp/crontab.iZqWJX/crontab":1: bad minute
errors in crontab file, can't install.
Что вы можете попробовать, так это получить сценарий, содержащий ваши envvars, непосредственно перед запуском нашей работы.
* * * * * . /path/to/envars ; /path/to/your/job
Я тестировал это с
* * * * * . /home/iain/envvars ; echo $HELLO >/tmp/test.out
с файлом envvars, содержащим
HELLO=fred
файл /tmp/test.out содержал следующее
fred
Думаю, это сработало. В source
команда (синоним .
) является встроенным bash, но исходный код не является posix, поэтому используйте .
является предпочтительным.
help source
source: source filename [arguments]
Execute commands from a file in the current shell.
Read and execute commands from FILENAME in the current shell. The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.
Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read