Como definir as variáveis de envius do accesisble pela execução do crontab e pelo shell bash

2

Eu quero definir variáveis de ambiente em um lugar que será acessível através de diferentes crontabs do usuário e do shell bash em execução.

Como posso escrevê-lo uma vez em um lugar para ser acessível a todos os usos mencionados acima?

Até agora estou escrevendo para bashrc em todo o sistema em / etc / bashrc, e em crontabs eu escrevo isso novamente acima de definições de crontab

    
por user370717 14.09.2016 / 13:42

1 resposta

3

Eu não acho que você possa fazer isso diretamente no crontab. O arquivo crontab não é um script de shell, portanto, tentar fornecer um script contendo envvars para ele não funciona

. /path/to/envvars

o crontab não instala isso porque não é válido

crontab: installing new crontab
"/tmp/crontab.iZqWJX/crontab":1: bad minute
errors in crontab file, can't install.

O que você pode tentar é pesquisar um script contendo seus envios imediatamente antes de executar nosso trabalho

* * * * * . /path/to/envars ; /path/to/your/job

Eu testei isso com

* * * * * . /home/iain/envvars ; echo $HELLO >/tmp/test.out

com o arquivo envvars contendo

HELLO=fred

o arquivo /tmp/test.out continha o seguinte

fred

Então eu acho que funcionou. O comando source (um sinônimo para . ) é um bash embutido, mas a origem não é posix, portanto, usar . é o preferido.

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
    
por 14.09.2016 / 13:59