Como faço para o cron executar meu script bash que referencia o nó?

1

Eu sei que esse é um tipo de pergunta muito popular, então peço desculpas por isso, mas estou realmente presa e li o cron wiki e tentou todas essas sugestões.

Eu também tentei de tudo que esse cara lista em sua pergunta , nomeadamente:

  • adicionando caminho bash ao crontab
  • especificando o caminho completo para os processos dentro do script bash
  • prefixando o script dentro do crontab com / bin / bash
  • suando sangue desde que eu tenho um casamento para ir e precisa desesperadamente deste maldito script para apenas trabalhar

Eu posso confirmar se o script funciona ao ser executado no meu terminal.

Então aqui vai ...

Crontab atual:

# add bash to cronjob path
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# start litecoin daemon on boot
@reboot /opt/litecoin-0.14.2/bin/litecoind

# check every 2 minutes to see if block scrape running and restart it if not
*/2 * * * * /home/grayedfox/github/blockscrape/restartBlockscrape.sh

Script:

#!/bin/bash

NODEPATH=$(which node)
PROCESS="$NODEPATH /home/grayedfox/github/blockscrape/main.js"

if pgrep -f "$PROCESS" > /dev/null; then
  echo "Blockscrape is doing it's thing - moving on..."
else
  echo "Blockscrape not running! Starting again..."
  $PROCESS
fi

Espero que, mesmo que o trabalho falhe, veja algum tipo de erro em algum lugar, mas não recebo nada e não vejo nada!

Atualização: na verdade, posso ver a tarefa do cron sendo executada, verificando a saída / var / log / syslog.

A saída é:

CRON[15038]: (grayedfox) CMD (/home/grayedfox/github/blockscrape/restartBlockscrape.sh)
CRON[15037]: (CRON) info (No MTA installed, discarding output)

O script também fica dentro do diretório do script do nó que ele chama (embora eu especifique o caminho completo, pois entendo que o script, quando executado pelo cron, tem o pwd como $ HOME).

    
por GrayedFox 16.03.2018 / 00:13

1 resposta

0

Embora todos os comentários tenham sido úteis para o

Acabei de registrar o resultado de cada operação dentro do script que imediatamente deixou claro que o problema não estava no cron executando o trabalho, mas sim que o nó não estava disponível para o ambiente do cron. Também atualizei meu crontab para tornar o shell padrão para bash , mas isso não era necessário para que o job fosse executado .

Este script final funciona, no entanto, ainda não está claro para mim porque a linha 3 falha para o cron, mas tem sucesso em um terminal bash, vou fazer uma nova pergunta para esse problema em particular.

Crontab:

# make default shell BASH
SHELL=/bin/bash

# start litecoin daemon on boot
@reboot /opt/litecoin-0.14.2/bin/litecoind

# check every minute to see if block scrape running and restart it if not
* * * * * /home/grayedfox/github/blockscrape/restartBlockscrape.sh

Script de bash:

#!/bin/bash

NODE="$(which node)" # <-- output in terminal is as expected (gets node version in use) but is blank in cron job
PROCESS="/home/grayedfox/.nvm/versions/node/v8.9.4/bin/node /home/grayedfox/github/blockscrape/main.js"
LOGFILE="/tmp/log.out"

export BLOCKSCRAPECLI="/opt/litecoin-0.14.2/bin/litecoin-cli"

# source $HOME/.bashrc # <-- even after sourcing .bashrc, line 3 returns nothing

if pgrep -f "$PROCESS" > /dev/null; then
  echo "Blockscrape is doing it's thing - moving on..." >> $LOGFILE
else
  echo "Blockscrape not running! Starting again..." >> $LOGFILE
  echo "Nodepath: $NODE" >> $LOGFILE
  echo "Process: $PROCESS" >> $LOGFILE
  $PROCESS >> $LOGFILE
fi
    
por GrayedFox 20.03.2018 / 01:00