como definir a variável PATH crontab

10

Eu tive um problema ao executar um script do crontab. Depois de algumas pesquisas eu entendi que o problema era porque o parâmetro PATH não inclui / sbin.

Eu olhei o que inclui em / etc / crontab:

PATH=/sbin:/bin:/usr/sbin:/usr/bin

Como teste - tarefa cron simples para imprimir a variável PATH:

* * * * * echo $PATH &> /root/TMP.log

a saída é:

cat /root/TMP.log
/usr/bin:/bin

Eu não entendo esse comportamento ... Como faço para definir a variável PATH ..? Ou melhor: como adicionar caminhos a ele?

    
por csny 03.08.2014 / 13:55

3 respostas

13

Embora sejam semelhantes, um usuário crontab (editado usando crontab -e) é diferente e mantém um caminho separado do crontab do sistema (editado editando / etc / crontab).

O crontab do sistema possui 7 campos, inserindo um nome de usuário antes do comando. O usuário crontab, por outro lado, possui apenas 6 campos, indo diretamente para o comando imediatamente após os campos de tempo.

Da mesma forma, o PATH no crontab do sistema normalmente inclui os diretórios / sbin, enquanto o PATH no crontab do usuário não o faz. Se você quiser definir o PATH para o usuário crontab, você precisa definir a variável PATH no crontab do usuário.

Uma solução simples para adicionar seu PATH regular em comandos shell no cron é fazer o cronjob originar seu perfil executando o bash em um shell de login. por exemplo, em vez de

* * * * * some command

Você pode executar

* * * * * bash -lc some command

Dessa forma, se o seu perfil definir o PATH ou outras variáveis de ambiente como algo especial, ele também será incluído no seu comando.

    
por 03.08.2014 / 14:13
7

Se você precisar de PATHs padrão do sistema e outras variáveis ENV (definidas em /etc/profile.d), basta colocar o seguinte:

* * * * * . /etc/profile; your cmd
    
por 02.02.2015 / 13:45
0

É possível definir o PATH (ou outros parâmetros) na linha do cronjob ou em uma única linha. Mas você não pode usar a expansão do shell como PATH=$PATH:/usr/local/bin . Mas o til é permitido para atalhos de diretório inicial.

Dos livros:

An active line in a crontab is either an environment setting or a cron command. An environment setting is of the form: name = value where the white spaces around the equal-sign (=) are optional, and any subsequent non-leading white spaces in value is a part of the value assigned to name. The value string may be placed in quotes (single or double, but matching) to preserve leading or trailing white spaces.

Veja man 5 crontab para mais informações.

Então, isso deve funcionar:

PATH=/bin:/usr/bin:/my/path/bin
5 3 * * * command_that_requires_my_path
    
por 12.12.2018 / 17:01