Я сделал довольно простой сценарий запуска для моей программы node.js, которая должна запускаться при запуске:
start on startup
stop on shutdown
script
exec sudo -u max WEBSITES_DIR=/home/max/websites/ /usr/local/bin/node /home/max/websites/server.js 2>&1 >> /var/log/node.log
end script
Если я использую:
sudo start my-program
он работает, но когда я перезагружаю машину, я получаю сообщение об ошибке:
init: my-program main process (325) terminated with status 2
Кто-нибудь знает, как это отладить?
В startup
Событие - это самое первое событие, которое генерируется в процессе загрузки Upstart. Есть много всего, чего еще не произошло - корневая файловая система по-прежнему будет смонтирована только для чтения, сеть не инициализирована и т. Д.
Я подозреваю, что задание завершается быстро, потому что все его зависимости (явные или неявные) еще не инициализированы. Я бы изменил начальное условие на что-то вроде
start on filesystem and started networking
По крайней мере, тогда вы сможете писать в свой лог-файл.
В качестве примечания: похоже, вы отменили аргументы перенаправления вывода - вы на самом деле имели в виду >> /var/log/node.log 2>&1
. С помощью 2>&1
означает «взять то, что сейчас является fd 1, и сделать fd 2 таким же», но вы еще не изменили, что такое stdout.
HiMax,
Запуск node.js на сервере Ubuntu
more /etc/init/noded.conf
Файл выскочки Ubuntu по адресу /etc/init/noded.conf
:
description "noded.conf"
author "ntbinh"
start on runlevel [2345]
stop on runlevel [06]
respawn
script
su - ubuntu -c "NODE_ENV=test exec sudo /etc/init.d/noded start"
end script
Ты уже /etc/init.d/noded
. Вы можете редактировать /etc/init/noded.conf
==> загрузка при запуске:
# Ubuntu upstart file at `/etc/init/noded.conf`
description "noded.conf"
author "ntbinh"
respawn
start on runlevel [2345]
stop on runlevel [06]
script
su - ubuntu -c "NODE_ENV=test exec sudo /usr/bin/nohup /usr/bin/node /home/ubuntu/server.js" >> /home/ubuntu/log.log
end script
В моем случае аналогичная ошибка была вызвана попыткой запустить сценарий из моего сценария-выскочки, которого на самом деле не существовало. Оказалось, что я забыл зафиксировать и запустить скрипт.