5

Я получил свой собственный сервер linode на днях и переместил небольшой nodejs / express, с которым я играл, из aws linux. Все отлично работает, но если я запускаю приложение с помощью upstart, оно не запускается с нужными разрешениями и не может записывать файлы на диск. Я перепробовал все варианты сценария upstart, от имени пользователя root, моего имени пользователя, www-data и ничего не работает. Я установил public каталог экспресс 777 даже в качестве теста, но не повезло. Я начинаю свою выскочку с sudo start now-images-manager . Когда я запускаю ps -ef я получаю следующий вывод:

root     25150     1  0 11:26 ?        00:00:00 sudo node /home/myusername/sites/now-images-manager/app.js
root     25151 25150  0 11:26 ?        00:00:03 node /home/myusername/sites/now-images-manager/app.js

Вот мой сценарий выскочки:

#!upstart
description "now-images-manager startup script"
author      "me@me.com"

start on startup
stop on shutdown

script
    export HOME="/root"
    echo $$ > /var/run/now-images-manager.pid
    exec sudo node /home/myusername/sites/now-images-manager/app.js >> /home/myusername/sites/now-images-manager/now-images-manager.sys.log 2>&1
    # exec sudo -u myusername /usr/bin/node /home/myusername/sites/now-images-manager/app.js >> /home/myusername/sites/now-images-manager/now-images-manager.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/now-images-manager.sys.log
end script

pre-stop script
    rm /var/run/now-images-manager.pid
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/now-images-manager.sys.log
end script

Вот пример из журнала:

downloadFileFromURL  { [Error: ENOENT, open 'public/images/tumblr_m9h1uh4KSi1qzl9k6o1_500.jpg']
  errno: 34,
  code: 'ENOENT',
  path: 'public/images/tumblr_m9h1uh4KSi1qzl9k6o1_500.jpg' }

Когда я запускаю приложение с node app.js в оболочке, оно прекрасно работает.

1 ответ1

1

Я нашел проблему. Если вы создаете каталоги с помощью вашего приложения-узла, сначала вам нужно перейти в каталог вашего приложения-узла. Так что мой скрипт выскочки выглядит следующим образом:

script
    export HOME="/var/www"
    cd $HOME/mywebsite/
    exec node index.js  >> /var/log/node.log 2>&1
end script

Вы можете проверить это, переместившись вверх по каталогу, а затем попытавшись запустить приложение вашего узла. Он должен выдать ту же ошибку, что и ваш сценарий upstart, перед внесением изменений, сделанных выше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .