Eu tenho um arquivo crontab
root
que se parece com isso:
lab-1:/var/www/cdd# crontab -l
# do daily/weekly/monthly maintenance
# min hour day month weekday command
* * * * * /etc/scripts/script1
*/15 * * * * /etc/scripts/script2
0 * * * * /etc/scripts/script3
Eu posso ver que todos os trabalhos são acionados executando este comando:
lab-1:/var/www/cdd# cat /var/log/messages | grep cron.info
Mar 15 13:00:00 lab-1 cron.info crond[7897]: USER root pid 26217 cmd /etc/scripts/script2
Mar 15 13:00:00 lab-1 cron.info crond[7897]: USER root pid 26219 cmd /etc/scripts/script3
Mar 15 13:01:00 lab-1 cron.info crond[7897]: USER root pid 26293 cmd /etc/scripts/script1
O problema é que script3 (provei que script2 e script1 funcionam) não está realmente produzindo a saída esperada. É suposto criar arquivos em outra pasta.
No entanto, quando eu executo manualmente assim, funciona muito bem:
lab-1:/etc/scripts# bash script3
Eu não sou um administrador de sistemas real, então não tenho certeza de qual é a melhor maneira de resolver isso.
A primeira coisa que vem à mente é a permissão.
lab-1:/etc/scripts# ls -lah
total 24
drwxr-xr-x 2 root root 4.0K Mar 15 12:20 .
drwxr-xr-x 34 root root 4.0K Mar 14 17:11 ..
-rwxr-xr-x 1 root root 5.0K Mar 15 12:19 script3
-rwxr-xr-x 1 root root 1.8K Mar 14 15:26 script1
-rwxr-xr-x 1 root root 1.9K Mar 14 15:26 script2
Embora ... tendo dito isso, se fosse um problema de permissões, ele apareceria como acionado / iniciado no meu arquivo /var/log/messages
?
Como devo proceder?
EDIT 1
lab-1:/etc/scripts# ./script3 | head -n 4
Working folder set to: /tmp/tmp.kOfhip
*****Grab SQL Data from Remote Server: spp.mydomain.net *****
COPY 344
Warning: Permanently added 'spp.mydomain.net,10.1.1.1' (ECDSA) to the list of known hosts.
Evaluate /tmp/tmp.kOfhip/spp.mydomain.net.db
lab-1:/etc/scripts#
EDIT 2
É assim que meu script se parece:
link
Como você pode ver, estou criando uma pasta temporária e fazendo todo o meu trabalho lá.
EDIT 3
Para provar para mim mesmo que não é por causa de linhas como a linha 9, eu comentei tudo, exceto as linhas 1 e 15. Adicionei a linha 16 que faz isso:
echo "done" >> /tmp/results.txt
Depois alterei o horário do trabalho para ser executado a cada dois minutos a partir de uma hora. Eu posso ver que ele é executado 3 vezes já.
Acho que continuarei com essa abordagem até encontrar algo que não funcione / exploda.
Eu não entendo muito bem o comentário feito abaixo sobre o uso de uma variável PATH ... mas eu acho que vou pesquisar no Google.
EDIT 4
Eu alterei o arquivo raiz crontabs para que ele produza os resultados do script3 em um arquivo e é isso que eu vejo:
Working folder set to: /tmp/tmp.GeNGDJ
*****Grab SQL Data from Remote Server: servername *****
COPY 344
Warning: Permanently added 'spp.mydomain.net,10.1.1.132' (ECDSA) to the list of known hosts.
Permission denied (publickey,keyboard-interactive).
Evaluate /tmp/tmp.GeNGDJ/spp.mydomain.net.db
cat: can't open '/tmp/tmp.GeNGDJ/spp.mydomain.net.db': No such file or directory
Então está morrendo ao tentar scp o arquivo. O SQL remoto funciona muito bem e mostra a saída. Mas como você pode ver, estou recebendo uma permissão negada
Mas se eu executar o mesmo comando manualmente, parece funcionar.
Vai ter que continuar bisbilhotando. Vai tentar despejar o ENV como é sugerido na resposta abaixo.