it-swarm-ja.com

upstart node.jsはファイルを保存できません、間違った権限ですか?

先日、自分のlinodeサーバーを入手し、awslinuxから遊んでいた小さなnodejs/expressを移動しました。すべてがうまく機能しますが、upstartでアプリを起動すると、適切な権限で実行されず、ファイルをディスクに書き込むことができません。 root、ユーザー名、www-dataなど、upstartスクリプトのあらゆる種類のバリエーションを試しましたが、何も機能しません。 Expressの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      "[email protected]"

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を使用してアプリを起動すると、完全に正常に動作します。

5
Thomas Traum

問題を見つけました。ノードアプリを使用してディレクトリを作成する場合は、最初にノードアプリのディレクトリにcdする必要があります。したがって、私の起動スクリプトは次のようになります。

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

これをテストするには、ディレクトリを上に移動してから、ノードアプリケーションを実行してみます。上記の変更を行う前に、upstartスクリプトと同じエラーがスローされるはずです。

1
TYRONEMICHAEL