2017-09-19 4 views
0

Ich verwende das Mediatek 7688 Board mit OpenWRT Linux, um ein IoT-Gerät zu erstellen. Ich habe die App in NodeJS geschrieben und möchte, dass sie jedes Mal ausgeführt wird, wenn das Board bootet.Daemonize nodejs app auf mediatek 7688

Ich habe versucht die Lösung [hier] (How to auto start an application in openwrt?), während dies funktioniert, aber die Platine scheint nicht in der Lage, den Startvorgang abzuschließen (die NodeJS App nicht beendet). Ich habe auch versucht, das PM2 Npm-Modul, aber Probleme mit dem Speicherplatz während der Installation.

Gibt es eine Möglichkeit, die "installierte" Größe des PM2-Moduls zu reduzieren? Oder vielleicht eine Möglichkeit, die NodeJS-Skripte beim Start hochzufahren, ohne das Modul zu benutzen.

Vielen Dank im Voraus!

Antwort

0

So war ich nur das PM2-Modul, um sicherzustellen,

  1. Das Programm beim Booten gestartet wurde
  2. Das Programm im Fall neu gestartet es
  3. abgestürzt

Um den ersten Teil zu erreichen und Da mein Programm ein Programm node.js war, habe ich es in eine ausführbare Datei umgewandelt, indem ich #!/bin/sh env node als erste Zeile in der Datei hinzugefügt habe. Es muss sichergestellt werden, dass die Zeile in einer LF-Zeilenendung endet und nicht wie bei Windows-Systemen CRLF. Sobald ich fertig war, gewährte ich der Datei .js die Ausführungsberechtigung, indem ich chmod a+x myfile.js aufruft.

Ich habe dann einen Init-Skript in /etc/init.d Ordnern und das Skript aktiviert - wie here erklärte

Nun, um sicherzustellen, dass der Prozess automatisch bei Neustart jemals abgestürzt, ich einen „cron-Skript “, wie so und speicherte es eine restart.sh im Stammordner:

#bin/sh 
if pgrep -f myfile.js > dev/null 
then 
    #process is already running - do nothing 
else 
    /etc/init.d/myprocess start 
fi 

und schließlich Setup ein crontab -e mit * * * * * ~/restart.sh, so dass die restart.sh jede Minute ausgeführt wird, um sicherzustellen, dass der Prozess ausgeführt wird.