Executar um script de shell via crontab

0

Atualmente eu fiquei preso tentando executar um script de shell via crontab. Não funciona e não consigo descobrir o que está errado aqui.

O que eu quero fazer é: Executar um arquivo javascript (index.js) com o nodejs periodicamente.

O arquivo run-logger.sh é executável ( -rwxr-xr-x ) e está localizado em /home/pi/apps/fritz-client .

run-logger.sh :

#!/bin/bash

# execute index.js and save all output to log
/usr/bin/env node /home/pi/apps/fritz-client/index.js >> fritz.log

Se eu executar este comando autônomo /usr/bin/env node /home/pi/apps/fritz-client/index.js >> fritz.log , tudo correu bem! Mesmo se eu fizer cd /home/pi/apps/fritz-client && ./run-logger.sh

crontab -e :

#
# lots of comments
#

*/1 * * * * /home/pi/apps/fritz-client/run-logger.sh

crontab -l mostra também.

Eu tentei:

  1. */1 * * * * /home/pi/apps/fritz-client/run-logger.sh
  2. */1 * * * * /bin/bash /home/pi/apps/fritz-client/run-logger.sh
  3. */1 * * * * /bin/sh /home/pi/apps/fritz-client/run-logger.sh
  4. */1 * * * * bash /home/pi/apps/fritz-client/run-logger.sh

O comando more /proc/version resulta em:

Linux version 4.1.18-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #846 SMP Thu Feb 25 14:22:53 GMT 2016

Atualizar

Esta é a minha primeira semana usando linux e um pi de framboesa. Então, por favor, seja paciente:)

syslog output

Mar 14 21:08:01 raspberrypi CRON[3609]: (pi) CMD (/home/pi/apps/fritz-client/run-logger.sh)
Mar 14 21:08:01 raspberrypi CRON[3602]: (CRON) info (No MTA installed, discarding output)
Mar 14 21:09:01 raspberrypi CRON[3626]: (pi) CMD (/home/pi/apps/fritz-client/run-logger.sh)
Mar 14 21:09:01 raspberrypi CRON[3619]: (CRON) info (No MTA installed, discarding output)
Mar 14 21:10:01 raspberrypi rsyslogd-2007: action 'action 17' suspended, next retry is Mon Mar 14 21:11:31 2016 [try http://www.rsyslog.com/e/2007 ]
Mar 14 21:10:01 raspberrypi CRON[3642]: (pi) CMD (/home/pi/apps/fritz-client/run-logger.sh)
Mar 14 21:10:01 raspberrypi CRON[3635]: (CRON) info (No MTA installed, discarding output)
Mar 14 21:10:06 raspberrypi crontab[3651]: (pi) BEGIN EDIT (pi)
Mar 14 21:10:19 raspberrypi crontab[3651]: (pi) REPLACE (pi)
Mar 14 21:10:19 raspberrypi crontab[3651]: (pi) END EDIT (pi)

ps aux | grep cron

root       382  0.0  0.2   5548  2452 ?        Ss   19:01   0:00 /usr/sbin/cron -f
pi        3683  0.0  0.2   4772  1936 pts/0    S+   21:11   0:00 grep --color=auto cron
    
por gearsdigital 14.03.2016 / 21:04

2 respostas

1

O cronjob está sendo executado. O script run-logger.sh está sendo encontrado e executado, ou o syslog indicaria isso. Mas a saída disso está sendo enviada para sua caixa de entrada de e-mail, que está quebrada. Corrigir o MTA para que você envie e-mail (localmente talvez) para que você possa ver a saída. Como alternativa, modifique seu cronjob para coletar a saída em um arquivo.

* * * * * /home/pi/apps/fritz-client/run-logger.sh &>/var/tmp/logger.out

Você não precisa do /1 - é redundante.

Modifique seu script node-js para que ele também registre stderr:

/usr/bin/env node /home/pi/apps/fritz-client/index.js >> fritz.log 2>&1

É possível que você não possa gravar em fritz.log . O padrão é o diretório inicial do usuário. Além disso, é pi o usuário do cronjob?

    
por 15.03.2016 / 00:15
2

Você não deve usar /usr/bin/env , ele procura apenas o executável node por meio de /bin e /usr/bin/ . Especifique o caminho completo para o executável node .

Como alternativa, você pode estender o PATH no seu crontab:

PATH=$PATH:/usr/local/bin

etc.

    
por 14.03.2016 / 21:21

Tags