Назад | Перейти на главную страницу

openshift, cron, node, строка 1: синтаксическая ошибка рядом с неожиданным токеном `('

Я почти уверен, что это какая-то проблема с конфигурацией или что-то в этом роде. Я использую узел V 0.10 и картридж cron V 1.4.

Вот мой сценарий bash для запуска моего сценария узла:

#!/bin/bash

node ${OPENSHIFT_REPO_DIR}.openshift/cron/daily/cron.js

и вот мой скрипт узла

var mongoose    = require('mongoose');
var express     = require('express');
var moment      = require('moment');
var _                   =   require('lodash');
var D               = require('d.js');
var events = require('events');
var eventEmitter = new events.EventEmitter();

Ошибка в журнале

 __________________________________________________________________________
 Thu Mar 19 03:45:35 EDT 2015: START daily cron run
 __________________________________________________________________________
 /var/lib/openshift/54e408fbe0b8cd1f400000a9/app-root/runtime/repo//.openshift/cron/daily/cron.js:
 /var/lib/openshift/54e408fbe0b8cd1f400000a9/app-root/runtime/repo//.openshift/cron/daily/cron.js: line 1: syntax error near unexpected token `('
 /var/lib/openshift/54e408fbe0b8cd1f400000a9/app-root/runtime/repo//.openshift/cron/daily/cron.js: line 1: `var mongoose    = require('mongoose');'
 /var/lib/openshift/54e408fbe0b8cd1f400000a9/app-root/runtime/repo//.openshift/cron/daily/cron.sh:
 [Error: /var/lib/openshift/54e408fbe0b8cd1f400000a9/app-root/runtime/repo/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/bson.node: invalid ELF header]
 js-bson: Failed to load c++ bson extension, using pure JS version
 __________________________________________________________________________
 Thu Mar 19 03:46:11 EDT 2015: END daily cron run - status=0
 __________________________________________________________________________

Я знаю, что cron запускает узел, потому что он никогда не запустит этот файл без его вызова bash. Так это проблема с параметрами? Я упускаю что-то очевидное?

OpenShift работает каждый файл в .openshift/cron/* справочники по соответствующему расписанию.

Таким образом, мы видим, что первый cron.js выполняется bash и выдает синтаксическую ошибку. Затем сразу после cron.sh выполняется.

Чтобы решить проблему, избавьтесь от cron.sh и добавьте это в первую строку cron.js:

#!/usr/bin/env node

var mongoose = ...

Хэш-банг сообщает Linux выполнить сценарий с node а не оболочку по умолчанию.

И помните, что скрипт должен быть исполняемым, прежде чем вы его зарегистрируете (но я думаю, вы уже это сделали).

chmod +x .openshift/cron/daily/cron.js