- Para executar o script de
crond
, você precisa fornecer o caminho completo para todos os binários, que sãopgrep
enode
em seu caso atual -
nohup
não é necessário.crond
executa scripts sem alocar o terminal.
Eu quero rodar nohup node service
usando um cron job no CentOS 7. Para isso eu criei um arquivo /home/guest/start_indexjs
mencionado abaixo:
#!/bin/bash
if pgrep -f "index.js" >/dev/null; then
echo "index.js is Running."
else
echo "index.js is Stopped."
nohup node /root/demo/index.js > /root/index-nohup.log &
fi
Eu faço o login com ssh root
e executo o seguinte comando:
cd /home/guest/
chown root start_indexjs
chgrp -R root start_indexjs
chmod +x start_indexjs
Eu quero executar /home/guest/start_indexjs
a cada minuto. Para isso eu adicionei a seguinte linha em /etc/crontab
:
*/1 * * * * root /home/guest/start_indexjs > /var/log/start_indexjs.log
Eu criei /var/log/start_indexjs.log
com as seguintes permissões:
-rwxrwxr-x 1 root root 179 Aug 12 12:31 start_indexjs
Em seguida, reiniciei crond
service usando o comando abaixo
systemctl restart crond.service
Depois de tudo isso, minha tarefa do cron está em execução, mas quando /home/guest/start_indexjs > /var/log/start_indexjs.log
é executado, na tarefa do cron, meu index.js
não é executado. Não há processo sendo executado com index.js
usando o seguinte comando:
ps -ef | grep index.js
crond
, você precisa fornecer o caminho completo para todos os binários, que são pgrep
e node
em seu caso atual nohup
não é necessário. crond
executa scripts sem alocar o terminal. Tags bash cron shell centos shell-script