Ответ 1
У меня была такая же проблема, что и на последнем Amazon (AWS), который основан на Redhat.
У меня есть upstart файл в /etc/init
, называемый node.conf
, и когда я запустил sudo start node
, я бы получил аналогичную ошибка вам start: Unknown job: node
.
Оказывается, что задание не запускается, если в вашем файле .conf
есть ошибка. Поэтому я начал, комментируя все строки и медленно наращивая, чтобы найти ошибку. Сообщение об ошибке не очень понятно и делает вид, что выскочка не может найти ваш файл conf.
Захват вашего '/var/log/messages' поможет вам отлаживать там журналы Upstart (это может быть где-то другое на Ubuntu. Mine сказал init: /etc/init/node-upstart.conf:8: Unknown stanza
, который помог мне разобраться в этом. Я неправильно указывал переменные.
Смотрите на AskUbuntu для аналогичного потока.
Здесь мой отредактированный рабочий script:
<!-- language: lang-sh -->
#!upstart
# using upstart http://upstart.ubuntu.com/getting-started.html and node forever https://github.com/nodejitsu/forever/
# to run server
# redhat has additional sudo restrictions, you must comment out 'Default requiretty' from /etc/sudoers
#startup monitoring script derived from http://stackoverflow.com/questions/11084279/node-js-setup-for-easy-deployment-and-updating
description "node.js server"
author "jujhar"
env PROGRAM_NAME="node"
env FULL_PATH="/home/httpd/buto-middleman/public"
env FILE_NAME="forever.js"
env NODE_PATH="/usr/local/bin/node"
env USERNAME="springloops"
start on startup
stop on shutdown
script
export HOME="/root"
export NODE_ENV=staging #development/staging/production
echo $$ > /var/run/$PROGRAM_NAME.pid
cd $FULL_PATH
#exec sudo -u $USERNAME $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1
exec $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1
end script
pre-start script
# Date format same as (new Date()).toISOString() for consistency
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/$PROGRAM_NAME.sys.log
end script
pre-stop script
rm /var/run/$PROGRAM_NAME.pid
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/$PROGRAM_NAME.sys.log
end script
- Редактировать 2013-06-01 -
Если вы находитесь на Centos или Amazon Linux, как я, посмотрите на init.d script.
- Редактировать 2013-10-14 -
Здесь ссылка на gist init.d script, который я фактически использую в производстве на Amazon Linux (на основе Redhat), Я просто сохраняю его в своем проекте в папке init.d
, а затем символически привязываю к нему в папке /etc/init.d
и теперь это демон/служба!
- Изменить 2014-06-05 -
Посмотрите этот удивительный блог artcile Джефф Дики on Node.js с использованием systemd, который намного чище и проще, чем все, что мы здесь делали (ИМХО). Он также использует Ansible для управления своим кластером (который я люблю), но вам не нужно идти так далеко, если вы не готовы.