Setup crontab, problemas com o usuário

1

Eu gostaria de configurar uma tarefa cron usando crontab -e . Este trabalho precisa ser executado como root, então pensei que simplesmente adicionar uma entrada em sudo crontab -e teria sido suficiente. Infelizmente não é.

O script que preciso executar funciona bem se eu digitar diretamente:

sudo /home/user/./script.sh

Estou logado na máquina como o usuário user , e minha entrada crontab ( sudo crontab -e ) é como a seguinte:

*/1 * * * * /home/user/./script.sh

Então, o que sinto falta aqui? Tenho a sensação de que o problema está relacionado com o direito do usuário atual ou algo assim.

Primeiro, consegui me livrar da necessidade de ser root para executar o script. Meu crontab entry (um clássico crontab -e desde que eu não preciso mais ser root) é executado a cada minuto e é:

* * * * * /home/user/script.sh

Meu script.sh :

#!/bin/bash
set -e
# Other stuff

Mais uma vez, funciona quando se escreve manualmente ./script.sh , mas não a partir do trabalho cron criado.

Eu sei que tenho a prova de que o script é executado pelo cron job. Eu redirecionei o erro em um arquivo como recomendado no comentário e recebi o seguinte erro:

python: can't open file 'get-status.py': [Errno 2] No such file or directory

Para explicar isso, em um ponto no meu script.sh , eu uso o docker para executar outro script:

docker run -v $PWD:/t -w /t [image] [command] get-status.py

que, novamente, funciona manualmente ( ./script.sh ), mas não do trabalho cron .

Então, encontrei o problema: docker run -v $PWD:/t [...] copia o conteúdo do diretório atual para o contêiner docker. Como ele é executado a partir do cron job, o diretório atual obviamente não é o bom, portanto, a exceção file not found .

Acho muito feio fazer algo como docker run -v /home/user/:/t [...] , haveria alguma outra maneira?

Solução

Embora esta questão esteja marcada como duplicada, não é o mesmo problema. Eu tenho um problema de PATH dentro do meu script e tive que modificá-lo, uma vez que ele é acionado por uma tarefa cron que tomou o caminho $PWD do script.
Veja minha própria resposta.

    
por Mornor 21.09.2016 / 14:42

1 resposta

1

O principal problema com a minha pergunta foi, na verdade, um problema com o PATH I definido no meu trabalho cron.
O cron job é usado para acionar um trabalho, e esse trabalho copia o diretório atual para um contêiner docker via docker run -v $PWD:/t [...] .
Como o cron job não é acionado a partir do diretório correto, eu tive que modificar o caminho no meu script para dizer ao docker para não usar o diretório atual , mas o diretório no qual o script reside .
Como apontado neste answer , modifico as linhas para:

 SCRIPT=$(readlink -f "$0")
 SCRIPTPATH=$(dirname "$SCRIPT")
 docker run -v $SCRIPTPATH:/t [...]
    
por Mornor 22.09.2016 / 10:03