2014-10-11 4 views
6

Я хочу, чтобы мой сервер выполнял скрипт узла каждую минуту. Программа выполняется отлично, если я запускаю файл вручную (./main.js), поэтому я уверен, что это не проблема. Но когда я передаю его на выполнение cron, ничего не происходит.Почему cron не выполнит мой скрипт node.js?

Вот строка из файла cron.

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

А вот образец журнала:

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

Исполняемый: 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); 

Любая идея, почему я получаю радиомолчание? Где-то еще я должен искать отладки?

UPDATE:

Я считаю, что проблема связана с моим относительно путей файлов и main.js выполняется за пределами своей директории.

Итак, теперь я разместил exe.sh в каталоге wudu. Это выглядит так:

#!/bin/bash 

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

exit 

Теперь я установил cron для выполнения этого файла каждую минуту. Я попытался выполнить этот файл из других папок, и он работает так, как ожидалось. Но опять же, cron не подбирает его.

+0

Возможно проверить права выполнения в файле. –

+0

Это испортило меня раньше, но я уже это исправил. Спасибо хоть. –

+0

относительный путь: 'var v = require ('./ cli/validation');' Ваше задание cron не запускается в каталоге '/ home/bryce/scripts/wudu /', но pwd скорее всего '/ home/bryce/'при вызове из cron. – wildplasser

ответ

10

Завершение выполнения сценария оболочки, скорее всего, выполнение сценария в cron не имеет такой же среды, как при запуске из командной строки.

Попробуйте предваряя исполнение скрипта в хронах с установкой NODE_PATH & PATH
(если вам нужны эти значения, по типу командной строки: echo $NODE_PATH и echo $PATH)

Итак, ваша запись хрон будет выглядеть :

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

Просто убедитесь, что подставить фактические значения для NODE_PATH & PATH с тем, что вы получаете от го e echo команды, которые вы впервые сделали.

0

У меня была точно такая же проблема, поэтому я закончил создание сценария транзитное, что бы загрузить свои переменные окружения, а затем выполнить узел так:

##!/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 

Для использования просто добавьте его в кронтаб

* * * * * <user> <passthrough_script> <arg1> <arg2> 
Смежные вопросы