upstart node.js 无法保存文件,权限错误?

upstart node.js 无法保存文件,权限错误?

前几天我得到了自己的 linode 服务器,并将我正在使用的小型 nodejs / express 从 aws linux 移过来。一切运行良好,但如果我用 upstart 启动应用程序,它不会以正确的权限运行,也无法将文件写入磁盘。我尝试了 upstart 脚本的各种变体,以 root 身份、以我的用户名、www-data 身份运行,但都不起作用。我将publicexpress 的目录设置为 777,即使只是作为测试,也没有成功。我用 启动我的 upstart 作业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 脚本:

#!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' }

当我在 shell 中启动该应用程序时,node app.js它运行正常。

答案1

我发现了这个问题。如果你使用节点应用程序创建目录,你首先需要进入节点应用程序的目录。所以我的 upstart 脚本如下所示:

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

您可以通过向上移动目录然后尝试运行节点应用程序来测试这一点。它应该会抛出与上述更改之前的 upstart 脚本相同的错误。

相关内容