2013-09-04 13 views
9

मैं अपने नोड सर्वर के लिए एक launchd.plist फ़ाइल लिखने की कोशिश कर रहा हूं। मैं अपने नोड सर्वर को चलाने के लिए हमेशा के लिए उपयोग कर रहा हूँ। मैं सर्वर को बूट पर शुरू करना चाहता हूं। मैं पहले चलाने के लिए mongodb लॉन्च डीस्ट के लिए भी इंतजार करना चाहूंगा।ओएसएक्स लॉन्च किया गया नोड हमेशा के लिए प्रक्रिया

मैंने होमब्री का उपयोग करके मोंगोबब स्थापित किया और यह पहले से ही launchd.plist के साथ आया था। मैं निम्नलिखित निष्पादित: MongoDB के लिए

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist 

plist है:

<!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> 

अगर मैं बंद कंप्यूटर और पुनः आरंभ 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: नोड: ऐसा कोई फ़ाइल या निर्देशिका

मुझे लगता है कि इसका मतलब है कि नोड बाइनरी नहीं मिल सका। मैं $ पाथ प्रतिबिंबित कर सकता हूं और/usr/local/bin मेरे पथ में है। मैं टर्मिनल से नोड शुरू कर सकता हूं। विचार? हमेशा के लिए पहले

उत्तर

1

जोड़ें नोड:

<key>ProgramArguments</key> 
<array> 
    <string>/usr/local/bin/node</string> 
    <string>/usr/local/bin/forever</string> 
    <string>/path/to/app.js</string> 
</array> 
+0

यह अपेक्षा के अनुरूप काम नहीं करता है। हालांकि यह 'app.js' शुरू होगा, आप इसे हमेशा के लिए' सुडो हमेशा सूची 'या' हमेशा सूची 'के साथ चलने में सक्षम नहीं होंगे। – jczaplew

+0

आपको एप.जेएस मजबूत से पहले शुरू करने की आवश्यकता है, तो आप चल रहे सभी नोड ऐप्स सूचीबद्ध कर सकते हैं ... – erwin

6

मैं इस समस्या को भी किया था, लेकिन मुझे लगता है कि स्टार्टअप पर चलाता है एक स्वचालक एप्लिकेशन का उपयोग करके इसे हल।

  1. ओपन स्वचालक और चुनते हैं, तो नया आवेदन अपने कार्यप्रवाह में

  2. डालें "भागो शैल स्क्रिप्ट"

  3. खोल स्क्रिप्ट में इस कोड, अपने पथ को पथ को बदलने का प्रयोग करें

export PATH=/usr/local/bin/:$PATH 
cd /path/to/your/nodejs/app 
forever start app.js 
  1. सिस्टम प्राथमिकताएं पर जाएं >> उपयोगकर्ता & समूह और लॉगिन आइटम टैब

  2. अपने ऑटोमेटर ऐप जोड़ें और खुश रहें।

समाधान का महत्वपूर्ण हिस्सा स्क्रिप्ट की पहली पंक्ति है (पथ में अपनी बिन जोड़ना)। यह शायद एक बैश स्क्रिप्ट पर एक स्टार्टअप आइटम को इंगित करने के लिए भी काम करेगा (और कोई ऑटोमेटर स्क्रिप्ट नहीं), कोशिश करने के लिए स्वतंत्र महसूस करें!

+0

लॉन्च किए गए डिमन्स, /etc/rc.common और अन्य सभी चीजें जिन्हें मैं पा सकता हूं, यह ऑटोमेटर। ऐप इसे हासिल करने का सबसे अच्छा तरीका है। – Dimitris

9

पर्यावरण जोड़ें चर मेरे लिए काम किया।

<key>EnvironmentVariables</key> 
<dict> 
    <key>PATH</key> 
    <string>/usr/local/bin/:$PATH</string> 
</dict> 

आपको अपने नोड ऐप में वर्किंग डायरेक्टरी को भी जोड़ने की आवश्यकता हो सकती है।

<key>WorkingDirectory</key> 
<string>path/to/your/node/app</string> 
+0

ने 'bash -c node index.js' चलाने की कोशिश कर रहे मेरे मुद्दों को हल किया – terrace

0

मुझे यकीन नहीं है कि node-launchd बाहर आया था। हालांकि, यह अधिक विश्वसनीय समाधान प्रतीत होता है।

जिस समाधान में वर्कफ़्लो बनाया गया है और लॉगिन आइटम में जोड़ा गया है, उसकी भी सराहना की जाती है। हालांकि, समस्या यह है कि यदि किसी सर्वर पर ऐप परोसा जाता है और जब सर्वर पुनरारंभ होता है, तो मुझे आश्चर्य होता है कि उपयोगकर्ता सिस्टम में लॉग इन करने से पहले ऐप शुरू कर दिया जाएगा। हालांकि कोशिश नहीं की थी।

0

यह मूल प्रश्नों का उत्तर नहीं है, लेकिन मैं रीबूट के बाद नोड सर्वर (और इसे चलाना जारी रखने) के लिए एक आसान तरीका ढूंढ रहा था। मुझे उपरोक्त समाधानों की तुलना में सेट करने के लिए pm2 मिला है।

# 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/

संबंधित मुद्दे