Проблема с автозапуском скрипта для node.js с помощью forever

Автор Sonic, 06 июня 2014, 12:12:21

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Sonic

Здравствуйте.
У меня имеется VPS на Debian 6 и приложение, работающее с node.js. Мне нужно, чтобы оно постоянно было запущено, для этого есть утилита forever. Из консоли достаточно запустить:

forever start /путь_до_скрипта/название_приложения.js

После этого приложение будет постоянно работать.
Я пытался сделать автозапуск приложения при загрузки с помощью крона:

@reboot forever start /путь_до_скрипта/название_приложения.js

Но после перезагрузки приложение не запустилось, поэтому я решил сделать стартовый скрипт по мануалу:
скрипт

Цитировать#! /bin/sh

### BEGIN INIT INFO
# Provides:          node
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: node
# Description:       node
### END INIT INFO

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting node "
   forever start /путь_до_скрипта/название_приложения.js
    ;;
  stop)
    echo "Stopping node"
   forever stop /путь_до_скрипта/название_приложения.js
    ;;
  *)
    echo "Usage: /etc/init.d/node {start|stop}"
    exit 1
    ;;
esac

exit 0
[свернуть]

Выставил ему права 755, проверил ручным запуском (из консоли отлично запускается и останавливается), добавил скрипт с помощью sudo update-rc.d node defaults
После выполнения команды выше никаких ошибок и предупреждений небыло, но после перезагрузки опять не стартует.

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

sandaksatru

Цитата: Sonic от 06 июня 2014, 12:12:21Уважаемые форумчане, подскажите, пожалуйста, как же мне добавить автоматический запуск приложения при загрузке?
Линки на скрипт в папки с уровнями запуска встали?

Sonic

Не могли бы вы подсказать как я могу проверить, встали ли линки?

sandaksatru

Цитата: Sonic от 07 июня 2014, 09:40:36
Не могли бы вы подсказать как я могу проверить, встали ли линки?
В стабильной версии Debian работает ещё классическая система инициализации. Все стартовые скрипты располагаются в директории /etc/init.d. На них создаются линки в папках, соответствующих уровням запуска, на которых нужно, чтобы эти сервисы работали. Это каталоги /etc/rcX.d, где X - уровень запуска. Параметр defaults команды update-rc.d создает линки в уровнях 2-5, которым соответствуют папки /etc/rc2.d, /etc/rc3.d, /etc/rc4.d, /etc/rc5.d. Посмотрите в одной из них, существует ли ссылка на ваш инит-скрипт?

Если не существует, то сервис можно установить ещё таким путём:
sudo insserv /etc/init.d/имя_скрипта

Вообще должны работать оба способа.

Sonic

Ссылки на скрипт существуют во всех папках (/etc/rc2.d, /etc/rc3.d, /etc/rc4.d, /etc/rc5.d).

endru

ну тогда давайте вывод команды:
whereis forever
и сам скрипт запуска init.d под спойлером

Sonic

whereis forever вернул:
/usr/local/bin/forever

Я попробовал прописать полный путь к forever в скрипт запуска, но не помогло.
скрипт

Цитировать
#! /bin/sh

### BEGIN INIT INFO
# Provides:          node
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: node
# Description:       node
### END INIT INFO

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting node "
   /usr/local/bin/forever start /путь_до_скрипта/название_приложения.js
    ;;
  stop)
    echo "Stopping node"
   /usr/local/bin/forever stop /путь_до_скрипта/название_приложения.js
    ;;
  *)
    echo "Usage: /etc/init.d/node {start|stop}"
    exit 1
    ;;
esac

exit 0
[свернуть]

Вручную этот скрипт отлично работает как с параметром start, так и с параметром stop.