Problemas ao fazer o crontab funcionar.

0

Ei, eu sou muito novo no Linux e ainda estou aprendendo, então espero que seja fácil para vocês.

Estou tentando aprender mais sobre como usar o cron para agendar eventos na minha máquina ubuntu. Agora eu tenho um script (script.sh) que é o seguinte:

#!/bin/bash

echo "I work" 

Eu logar no terminal como root (sudo -i) e estou entrando:

sudo bash /home/lskidson/tests/script.sh 

Executa corretamente o script quando eu faço isso. (Ainda logado como root) Eu tenho um crontab configurado para executar este script a cada minuto que eu não posso começar a trabalhar é como segue (eu configurá-lo usando crontab -e)

* * * * * sudo bash /home/lskidson/tests/script.sh

Eu escrevo no arquivo e quando imprimo a lista de trabalhos (crontab -l) ele aparece apropriadamente como eu pedi. No entanto, o script nunca é executado.

Vocês têm alguma dica geral sobre o que poderia estar errado? Eu posso fornecer mais informações, se necessário. Desde já, obrigado!

    
por LSKidson 22.03.2018 / 16:10

2 respostas

1

Como você sabe que nunca é executado? Não vai ecoar para o seu terminal. Primeiro largue o sudo ... que nunca deveria estar em um cronjob. Um crontab para root é executado como root, o crontab para um usuário é executado como o usuário, coloque seu script de acordo.

Canalize sua saída para um arquivo assim

echo "I work" > /path/to/some/file.txt

ou

* * * * * /home/lskidson/tests/script.sh > /path/to/some/file.txt

Use > para substituir o arquivo, > > para anexar a ele.

    
por rtaft 22.03.2018 / 16:38
1

Firs com o shebang #!/bin/bash você já definiu este é um script Bash. O próximo passo é criar o arquivo executável para executá-lo sem o comando bash em a partir dele:

chmod +x /home/lskidson/tests/script.sh 

Em geral, o comando sudo não é aplicável em crontab . Se você precisar executar o Cronjob by root, você pode usar o crontab da raiz, que pode ser obtido pelo comando sudo crontab -e .

Agora podemos ir para a pergunta do Crontab. Onde você espera receber a mensagem "Eu trabalho"? Existem alguns casos.

1. Se o arquivo executável gerar um arquivo de saída, ou apenas modificar algumas coisas, o trabalho do Cron deverá ser:

* * * * * /home/lskidson/tests/script.sh 

2. Se o programa não gravar nenhum arquivo de saída e apenas gerar alguns dados dentro do stdout (como no seu caso), você deve redirecionar para um arquivo para vê-lo um lugar apropriado (esta parte 2>&1 redireciona e as mensagens de erro para stdout) :

* * * * * /home/lskidson/tests/script.sh >> /home/lskidson/tests/script.sh.log 2>&1

3. Enquanto o stdout não é redirecionado, o Cron enviará mensagens locais para o usuário (se a sua correspondência local estiver configurada corretamente), a menos que isso seja sobrescrito, definindo a variável MAILTO in crontab :

MAILTO="[email protected]"
* * * * * /home/lskidson/tests/script.sh

Referências:

por pa4080 22.03.2018 / 16:46