Приложение nodejs не запускается правильно навсегда после перезагрузки

У меня есть приложение nodejs, которое я хочу автоматически перезапустить после перезагрузки сервера. Я создал скрипт для запуска приложения навсегда, как показано ниже.

#!/bin/sh
export PATH=/usr/bin:$PATH
forever start --command node --minUptime 1000 --spinSleepTime 10000 --sourceDir /etc/csc server.js >> /etc/csc/log.txt 2>&1

Я также создал запись в crontab для запуска этого скрипта после перезагрузки:

@reboot /etc/csc/csc-starter.sh

Хотя я не думаю, что часть crontab действительно актуальна, как я объясню ниже. Проблема в том, что хотя приложение nodejs запускается после перезагрузки, оно не отвечает правильно на запросы клиентов. Например, вызов URL-адреса, который должен привести к отображению основного представления приложения (в браузере), приводит к следующему выводу:

{
code: "ResourceNotFound",
message: "/"
}

Интересно, что тот же результат наблюдается, когда я запускаю стартовый скрипт вручную. Однако, если я запускаю приложение nodejs вручную с помощью:

node /etc/csc/server.js

это работает отлично. Я относительный новичок в Linux, и вы можете с уверенностью предположить, что я мог не знать о некоторых общепринятых истинах о работе в Linux, таких как, возможно, уместность размещения приложения в /etc.

Любые идеи, почему запуск приложения навсегда изменит его внутреннее поведение? Рассматриваемое приложение довольно простое. Он основан на restify и имеет несколько маршрутов REST, а также размещает статический контент, но на самом деле ничего особенного.

Спасибо.


person lje    schedule 01.11.2014    source источник


Ответы (2)


/etc, вероятно, не лучшее место для вашего приложения. Хотя это не имеет прямого отношения к вашей проблеме.

Когда вы запускаете свое приложение из командной строки вручную, вы, вероятно, уже находитесь в каталоге /etc/csc.

Попробуйте добавить изменение каталога в сценарий запуска:

#!/bin/sh
export PATH=/usr/bin:$PATH
cd /etc/csc
forever start --command node --minUptime 1000 --spinSleepTime 10000 --sourceDir /etc/csc server.js >> /etc/csc/log.txt 2>&1

Приложение, вероятно, настроено на использование подкаталога вне текущего каталога для своих статических ресурсов.

--

Вам следует подумать о размещении вашего приложения в /opt/csc. Это более общее место для сторонних приложений. /etc больше для настройки системы.

person Daniel    schedule 01.11.2014
comment
Спасибо за быстрый ответ. Я добавил каталог изменений, и все хорошо! Я думаю, я много думал о том, что навсегда сделает для меня, особенно потому, что это требовало параметра sourceDir. Живи и учись. (И я переместил приложение в /opt/csc, спасибо и за этот совет). - person lje; 02.11.2014

/etc/csc server.js >>

Удалите пробел в пути.

/etc/csc/server.js >>
person Stephen P.    schedule 01.11.2014