2014-10-11 21 views
6

Chcę, aby mój serwer co minutę wykonywał skrypt węzłowy. Program wykona się doskonale, jeśli ręcznie wykonam plik (./main.js), więc jestem pewien, że to nie problem. Ale kiedy oddam to cronowi do wykonania, nic się nie dzieje.Dlaczego cron nie wykonuje mojego skryptu node.js?

Oto linia z pliku cron.

*/1 * * * * /home/bryce/scripts/wudu/main.js

A oto przykładowy log:

Oct 11 15:21:01 server CROND[2564]: (root) CMD (/home/bryce/scripts/wudu/main.js)

wykonywalny: home/bryce/scripts/wudu/main.js

#!/usr/bin/env node 

var program = require('commander'); 
var v = require('./cli/validation'); 
var a = require('./cli/actions'); 

program 
    .version('0.0.1') 
    .option('-u, --url', 'Register url') 
    .option('-s, --selector', 'Register selector') 
    .option('-p, --pagination', 'Register pagination') 
    .option('-i, --index', 'Pass an index, to destroy') 
    .parse(process.argv); 

var args = process.argv.slice(2), 
     mode = v.mode(args[0]), 
     options = v.hasArgs(mode, program); 

a.init(mode, options); 

Każdy pomysł dlaczego Dostaję ciszę radiową? Gdzie indziej powinienem szukać debugowania?

UPDATE:

Wierzę, że problem ma związek z moim krewnym filepaths i main.js wykonywane spoza własnego katalogu.

Tak więc umieściłem exe.sh w katalogu wudu. Wygląda to tak:

#!/bin/bash 

cd ${0%/*} 
./main.js mail 

exit 

Teraz ustawiłem crona, aby uruchamiał ten plik co minutę. Próbowałem wykonać ten plik z innych folderów i działa zgodnie z oczekiwaniami. Ale znowu Cron tego nie robi.

+0

Może sprawdzić uprawnienia wykonywania w pliku. –

+0

To mnie wcześniej zepsuło, ale naprawiłem to już. W każdym razie dzięki. –

+0

ścieżka względna: 'var v = require ('./ cli/validation');' Twoje zadanie cron nie jest uruchamiane w katalogu '/ home/bryce/scripts/wudu /', ale pwd najprawdopodobniej jest '/ home/bryce/'po wywołaniu z crona. – wildplasser

Odpowiedz

10

Zawijanie wykonania w skrypcie powłoki, jest prawdopodobne, że wykonanie skryptu w cron nie ma takiego samego ustawienia środowiska jak podczas uruchamiania z wiersza poleceń.

Spróbuj poprzedzając wykonanie skryptu powłoki w cron z ustawieniem NODE_PATH & PATH
(jeśli potrzebujesz tych wartości, na rodzaj wiersza komend: echo $NODE_PATH i echo $PATH)

Tak, Twój wpis cron będzie wyglądać :

*/1 * * * * NODE_PATH=/usr/local/lib/node_modules PATH=/opt/local/bin:ABC:XYZ /home/bryce/scripts/wudu/exe.sh 

Wystarczy upewnić się, aby zastąpić rzeczywistych wartości NODE_PATH & PATH z tym, co można uzyskać z th e echo poleceń, które po raz pierwszy wykonałeś.

0

miałem dokładnie ten sam problem, więc skończyło tworzenia skryptu połączenia Przez które załadować moje zmienne środowiskowe, a następnie wykonać węzeł tak:

##!/bin/bash 

# Source bash profile to load env variables 
# or any other that you want to set explicitly 
. ~/.bash_profile 

# tunnel that allows us to execute cron jobs 
node $1 $2 

Aby korzystać wystarczy dodać go do crontab

* * * * * <user> <passthrough_script> <arg1> <arg2> 
Powiązane problemy