$ USER não está em execução no crontab

2

Eu criei um script simples para verificar a variável de ambiente para executar a partir do crontab.

#!bin/bash
echo $USER > cron.txt

salva como script.sh no diretório inicial.

Configuração do Crontab: */1 * * * * ./script.sh

Se eu o executar manualmente, ele funciona, mas não no crontab. A saída deve mostrar meu nome de usuário no arquivo cron.txt, mas isso não acontece.

    
por d a i s y 09.02.2017 / 07:33

1 resposta

4

Quando o cron executa seu trabalho, ele faz isso em um ambiente que não é o mesmo que o seu ambiente atual do shell.

Isso significa, por exemplo, que ./script.sh pode não ser encontrado.

Existem duas soluções:

*/1 * * * * ( cd $HOME/mydir && ./script.sh )

ou

*/1 * * * * $HOME/mydir/script.sh

Ou seja, especifique exatamente onde o script pode ser encontrado.

A primeira alternativa pode ser preferível se você não usar nomes de caminhos absolutos para o arquivo de saída dentro do script.

Se você escolher a segunda opção, modifique seu script para saber onde o arquivo de saída está:

#!/bin/bash
echo "$USER" >"$HOME/mydir/cron.txt"

ou

#!/bin/bash
( cd "$HOME/mydir" && echo "$USER" >cron.txt )

Observe que a linha #! precisa conter o caminho absoluto correto para bash (o seu caminho é relativo).

Deve-se notar também que o cron em alguns Unices (Linux) não define USER para o nome de usuário do usuário que está executando o cron job. Nesses sistemas, use $LOGNAME ou defina USER a $LOGNAME ao invocar o script:

*/1 * * * * env USER=$LOGNAME $HOME/mydir/script.sh
    
por 09.02.2017 / 12:39