Crontab agindo estranho

0

Então, com base na minha última pergunta aqui Eu consegui que funcionasse, mas depois tentei criar um crontab, para verificar o número de linhas em uma determinada data a cada 2 minutos.

Então meu script parece com isso

1 test=/root/test
2 n="$(cat /root/test)"
3 t="$(date)"
4 echo "there were $n lines in $test at $t" >> rtest1

E sempre que executo o script, o rtest1 mostra o resultado desejado:

there were 224 lines in /root/test at Fri Aug 10 10:28:25 EEST 2018
there were 224 lines in /root/test at Fri Aug 10 10:28:25 EEST 2018
there were 224 lines in /root/test at Fri Aug 10 10:28:26 EEST 2018
there were 224 lines in /root/test at Fri Aug 10 10:28:26 EEST 2018
there were 224 lines in /root/test at Fri Aug 10 10:28:26 EEST 2018
there were 224 lines in /root/test at Fri Aug 10 10:28:26 EEST 2018

No entanto, quando isso acontece por causa do crontab, por algum motivo bizarro, às vezes ele omite o número das linhas da seguinte forma:

there were 229 lines in /root/test at Fri Aug 10 10:20:51 EEST 2018
there were  lines in /root/test at Fri Aug 10 10:22:01 EEST 2018
there were 224 lines in /root/test at Fri Aug 10 10:24:01 EEST 2018
there were 224 lines in /root/test at Fri Aug 10 10:26:02 EEST 2018
there were  lines in /root/test at Fri Aug 10 10:28:01 EEST 2018

É assim que meu crontab se parece:

[root@centos7desk ~]# crontab -l
* * * * * ps axu | wc -l > /root/test
*/2 * * * * /root/script.sh

Eu não tenho ideia de por que isso acontece.

    
por iamAguest 10.08.2018 / 09:33

1 resposta

1

Basicamente, esta é uma condição de corrida se ambas as entradas do crontab forem executadas de uma só vez. No caso "sem valores", o arquivo de saída é criado, mas ainda não é preenchido (porque ps axu | wc -l demora mais para ser executado do que seu script provavelmente).

Para superar, você pode adicionar um sleep 5 no início do script (o que, tecnicamente, não impede a condição de corrida, mas torna muito improvável que ocorra, a menos que o sistema esteja sobrecarregado). Ou coloque tudo em um script (que provavelmente é a melhor solução aqui).

    
por 10.08.2018 / 09:40

Tags