OSX为节点的永久处理启动了plist
我正在尝试为我的节点服务器编写launchd.plist文件。 我永远使用运行我的节点服务器。 我希望服务器在启动时启动。 我也想等待蒙古人启动plist首先运行。
我用自制软件安装了mongobb,已经有了launchd.plist。 我已经执行了以下内容:
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
plong for mongodb是:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>homebrew.mxcl.mongodb</string> <key>ProgramArguments</key> <array> <string>/usr/local/opt/mongodb/mongod</string> <string>run</string> <string>--config</string> <string>/usr/local/etc/mongod.conf</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <false/> <key>WorkingDirectory</key> <string>/usr/local</string> <key>StandardErrorPath</key> <string>/usr/local/var/log/mongodb/output.log</string> <key>StandardOutPath</key> <string>/usr/local/var/log/mongodb/output.log</string> <key>HardResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>1024</integer> </dict> <key>SoftResourceLimits</key> <dict> <key>NumberOfFiles</key> <integer>1024</integer> </dict> </dict> </plist>
如果我closures了电脑,并重新启动mongodb应该启动。
但是我的节点服务器没有启动。 有任何想法吗?
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <dict> <key>SuccessfulExit</key> <false/> </dict> <key>Label</key> <string>com.test.app</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/forever</string> <string>-a</string> <string>-l</string> <string>/var/log/app/app.log</string> <string>-e</string> <string>/var/log/app/app_error.log</string> <string>/data/server/app.js</string> </array> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>3600</integer> </dict> </plist>
编辑:
写入日志文件,我看到这个:
env:node:没有这样的文件或目录
我认为这意味着无法find节点二进制文件。 我可以echo $ PATH和/ usr / local / bin在我的path。 我可以从terminal启动节点。 想法?
添加环境variables为我工作。
<key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/local/bin/:$PATH</string> </dict>
您可能还需要将WorkingDirectory添加到您的节点应用程序。
<key>WorkingDirectory</key> <string>path/to/your/node/app</string>
我也有这个问题,但我使用启动时运行的Automator应用程序解决了这个问题。
-
打开Automator并selectNew Application
-
插入您的工作stream程“运行Shell脚本”
-
在shell脚本中使用此代码,将path更改为您的path
export PATH=/usr/local/bin/:$PATH cd /path/to/your/nodejs/app forever start app.js
-
进入系统首选项>>用户和组,然后单击login项目选项卡
-
添加您的Automator应用程序,并开心。
解决scheme的重要部分是脚本的第一行(将bin添加到path中)。 它可能会工作添加一个启动项目指向一个bash脚本(也没有Automator脚本),请随时尝试!
永远添加节点:
<key>ProgramArguments</key> <array> <string>/usr/local/bin/node</string> <string>/usr/local/bin/forever</string> <string>/path/to/app.js</string> </array>
我不确定何时发布node-launchd 。 但是,这似乎是更可靠的解决scheme。
创build工作stream程并将其添加到login项目的解决scheme也非常值得赞赏。 然而,问题是,如果应用程序在服务器上,服务器重新启动,我不知道该应用程序将在用户login到系统之前启动。 虽然没有尝试。
这不是原来的问题的答案,但我正在寻找一种简单的方法来启动节点服务器(并保持它运行)后重新启动。 我发现pm2比上面的解决scheme更容易设置。
# install pm2 npm install pm2 -g # start server pm2 start app.js # start pm2 after reboot (might need sudo) $ pm2 startup