Como obter o pid para o script cron?

1

Estou usando o centOS 7 e estou tentando fazer juntos esses walk-ups:

Script para verificar se o processo está sendo executado

O exemplo do Github de fazer o sidekiq rodar como serviço

No entanto, ambos parecem muito inteligentes, eu fiquei preso quando tentei verificar o script do primeiro manualmente.

Então, em /etc/cron.hourly, coloquei o sidekiq_restart com o seguinte script:

    #!/bin/bash
# A simple script to check if a process is running and if not will
# restart the process and send a mail.
################################################
# The name of the program we want to check
PROGRAM=sidekiq

# The user we would like notified of the restart
MAILUSER="[email protected]"
################################################

PROCESSPID=$(pidof -s $PROGRAM)
if [ -z "$PROCESSPID" ];
then
# Use systemctl
systemctl stop $PROGRAM.service
systemctl start $PROGRAM.service
# Comment above and uncomment below to use service rather than systemctl
# service $PROGRAM restart
echo mail -s "Service $PROGRAM was found to be stopped on $HOSTNAME at $(date) and has been restarted" $MAILUSER << /dev/null
echo "$PROGRAM had FAILED on $HOSTNAME @ $(date)" >> $PROGRAM-check.log
else
echo "$PROGRAM was running ok on $HOSTNAME @ $(date)" >> $PROGRAM-check.log
fi
exit

Eu rodei o sidekiq como serviço com:

systemctl start sidekiq

E quando eu verifico com ps -aux | grep [s]idekiq :

deploy_+  9883 36.4  0.6 474972 100292 ?       Ssl  14:23   0:02 sidekiq 5.1.3 pnvstart [0 of 20 busy]

Parece perfeito! Mas quando eu tento:

pidof -s sidekiq

Não retorna nada! Claro que isso significa que o script estará errado! Como consertar isso? Obrigado antecipadamente!

    
por Alexander Gorg 04.05.2018 / 14:17

1 resposta

0

Da sua saída ps , parece que sidekiq altera seu próprio nome de processo para incluir informações de tempo de execução: sidekiq 5.1.3 pnvstart [0 of 20 busy] . Nesse caso, pidof provavelmente não o encontrará porque está procurando exatamente "sidekiq".

Se você não planeja iniciar e parar manualmente o sidekiq, você pode usar as próprias ferramentas do systemd: systemctl is-active sidekiq retornará com código de erro se o sidekiq não estiver em execução e com sucesso se for.

Pessoalmente, sou amigo de sair em breve, por isso escrevo o código ao longo das linhas

systemctl is-active sidekiq && exit # all is well

# oh no, it's gone!
systemctl restart sidekiq
mail -s ...
    
por 04.05.2018 / 14:41