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应用程序解决了这个问题。

  1. 打开Automator并selectNew Application

  2. 插入您的工作stream程“运行Shell脚本”

  3. 在shell脚本中使用此代码,将path更改为您的path

 export PATH=/usr/local/bin/:$PATH cd /path/to/your/nodejs/app forever start app.js 
  1. 进入系统首选项>>用户和组,然后单击login项目选项卡

  2. 添加您的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 

http://pm2.keymetrics.io/docs/usage/startup/