Назад | Перейти на главную страницу

Как определить переменные среды, доступные через crontab run и bash shell

Я хочу определить переменные среды в одном месте, которые будут доступны через 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