2013-09-04 17 views
9

Sto provando a scrivere un file launchd.plist per il mio server nodo. Sto usando per sempre per eseguire il mio server nodo. Vorrei che il server iniziasse all'avvio. Vorrei anche aspettare che mongodb launchd plist venga eseguito per primo.OSX launchd plist per il processo nodo per sempre

Ho installato mongobb usando homebrew ed è già presente con un launchd.plist. Ho eseguito il seguente:

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

plist per 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> 

Se spegnere il computer e riavviare MongoDB spara come dovrebbe.

Tuttavia il mio server di nodo non si avvia. Qualche idea?

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

EDIT:

la scrittura di file di log e vedo questo:

ENV: nodo: No such file or directory

Credo che questo significa che il nodo binario non può essere trovato. Posso echo $ PATH e/usr/local/bin è nel mio percorso. Posso avviare il nodo dal terminale. Idee?

risposta

1

Add nodo prima di sempre:

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

Questo non funziona come previsto. Mentre avvierà "app.js", non potrai vederlo girare per sempre con "sudo forever list' o" forever list ". – jczaplew

+0

è necessario inserire start prima che app.js sia forte, quindi è possibile elencare tutte le app nodo in esecuzione ... – erwin

6

ho avuto anche questo problema, ma ho risolto utilizzando un app Automator che viene eseguito all'avvio.

  1. Aprire Automator e scegli, Nuova Applicazione

  2. Inserire nel vostro flusso di lavoro "Shell Script Run"

  3. Usa questo codice nello script di shell, cambiando i percorsi per i percorsi

export PATH=/usr/local/bin/:$PATH 
cd /path/to/your/nodejs/app 
forever start app.js 
  1. Vai a Preferenze di Sistema >> Utente & Gruppi e fai clic sulla scheda Elementi di login

  2. Aggiungi la tua app di Automator e sii felice.

La parte importante della soluzione è la prima riga dello script (aggiunta del cestino al percorso). Probabilmente lavorerebbe per aggiungere un elemento di avvio puntato anche a uno script bash (e nessuno script di Automator), sentitevi liberi di provare!

+0

Come dopo aver provato i daemon di launchd, /etc/rc.common e tutte le altre cose che ho trovato, questo Automator. l'app è il modo migliore per raggiungere questo obiettivo. – Dimitris

9

Aggiungi ambiente Le variabili hanno funzionato per me.

Potrebbe anche essere necessario aggiungere WorkingDirectory all'app del nodo.

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

risolto i miei problemi cercando di eseguire 'bash -c node index.js' – terrace

0

io non sono sicuro di quando node-launchd è venuto fuori. Tuttavia, sembra essere la soluzione più affidabile.

Anche la soluzione in cui un flusso di lavoro viene creato e aggiunto all'elemento di accesso è molto apprezzata. Tuttavia, il problema è che se l'app viene servita su un server e al riavvio del server, mi chiedo se l'app verrà avviata prima dell'accesso dell'utente al sistema. Non ho provato, però.

0

Questa non è una risposta alle domande originali, ma stavo cercando un modo semplice per avviare un server nodo (e mantenerlo in esecuzione) dopo il riavvio. Ho trovato che pm2 è molto più semplice da configurare rispetto alle soluzioni per forever precedenti.

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

Problemi correlati