Tho*_*aum 5 upstart ubuntu node.js
前几天我有了自己的 linode 服务器,并从 aws linux 上移动了一个我正在玩的小型 nodejs/express。一切都很好,但是如果我用 upstart 启动应用程序,它就不会以正确的权限运行,也无法将文件写入磁盘。我尝试了新贵脚本的各种变体,以 root 身份,以我的用户名,www-data 身份,但没有任何效果。我将public
express的目录设置为 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
Run Code Online (Sandbox Code Playgroud)
这是我的新贵脚本:
#!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
Run Code Online (Sandbox Code Playgroud)
以下是日志中的示例:
downloadFileFromURL { [Error: ENOENT, open 'public/images/tumblr_m9h1uh4KSi1qzl9k6o1_500.jpg']
errno: 34,
code: 'ENOENT',
path: 'public/images/tumblr_m9h1uh4KSi1qzl9k6o1_500.jpg' }
Run Code Online (Sandbox Code Playgroud)
当我node app.js
在 shell 中启动应用程序时,它运行良好。
小智 1
我发现了这个问题。如果您使用节点应用程序创建目录,则首先需要 cd 进入节点应用程序的目录。所以我的新贵脚本如下所示:
script
export HOME="/var/www"
cd $HOME/mywebsite/
exec node index.js >> /var/log/node.log 2>&1
end script
Run Code Online (Sandbox Code Playgroud)
您可以通过向上移动目录然后尝试运行节点应用程序来测试这一点。在进行上述更改之前,它应该抛出与您的 upstart 脚本相同的错误。
归档时间: |
|
查看次数: |
1146 次 |
最近记录: |