2012-06-30 2 views
38

Gibt es eine kurze Anleitung, um zu erklären, wie eine Anwendung gestartet wird, wenn die Instanz gestartet und ausgeführt wird? Wenn es einer der durch yum installierten Dienste wäre, dann könnte ich /sbin/chkconfig verwenden, um es dem Dienst hinzuzufügen. (Um es sicher zu machen, ist es richtig?)Wie kann ich automatisch eine node.js-Anwendung in Amazon Linux AMI auf aws starten?

Allerdings möchte ich nur das Programm ausführen, das nicht über yum installiert wurde. Um das Programm node.js auszuführen, muss ich das Skript sudo node app.js im Home-Verzeichnis ausführen, wenn das System hochfährt.

Ich bin nicht an Amazon Linux AMI gewöhnt, so dass ich kaum Probleme habe, einen 'richtigen' Weg zu finden, ein Skript automatisch bei jedem Booten auszuführen.

Gibt es eine elegante Möglichkeit, dies zu tun?

+0

Versuchen Sie, diese Lösung. Es ist sehr einfach. http://StackOverflow.com/a/22171598/1028103 –

Antwort

18

Eine Möglichkeit besteht darin, einen Startjob zu erstellen. Auf diese Weise startet Ihre App, sobald Linux geladen wird, wird automatisch neu gestartet, wenn es abstürzt, und Sie können es starten/stoppen/neu starten, indem Sie sudo start yourapp/sudo stop yourapp/sudo restart yourapp.

Hier beginnen Schritte:

1) Installieren Emporkömmling Dienstprogramm (möglicherweise, wenn Sie ein Standard Amazon Linux AMI) verwenden vorinstalliert sein:

sudo yum install upstart 

Für Ubuntu:

sudo apt-get install upstart 

2) Erstellen Sie ein Upstart-Skript für Ihre Knoten-App:

in /etc/init ad d Datei yourappname.conf mit den folgenden Codezeilen:

#!upstart 
description "your app name" 

start on started mountall 
stop on shutdown 

# Automatically Respawn: 
respawn 
respawn limit 99 5 

env NODE_ENV=development 

# Warning: this runs node as root user, which is a security risk 
# in many scenarios, but upstart-ing a process as a non-root user 
# is outside the scope of this question 
exec node /path_to_your_app/app.js >> /var/log/yourappname.log 2>&1 

3) starten Sie Ihre App von sudo start yourappname

+11

Soweit ich weiß, ist das Linux, das auf Amazon läuft RedHat abgeleitet, nicht Ubuntu abgeleitet, daher ich don Ich denke nicht, dass Emporkömmling verfügbar ist. – Unknown

+0

Vielleicht. Ich starte meine Node.js App unter Debian. –

+0

Danke Mann - ich habe mir die Haare ausgezogen. –

6

Schnelle Lösung für Sie wäre Ihre App von /etc/rc.local zu starten; Füge einfach deinen Befehl dort hinzu.

Aber wenn man die elegante Art und Weise gehen möchten, müssen Sie Ihre Anwendung in einer RPM-Datei verpacken müssen, ein Startup-Skript, das so in /etc/rc.d geht, dass Sie chkconfig auf Ihrer App verwenden können, installieren Sie dann die Drehzahl auf deiner Instanz.

Vielleicht this oder this Hilfe. (oder einfach googlen nach "creating rpm packages")

+0

Wenn ich rpm-Methode verwende, muss ich RPM-Paket jedes Mal neu erstellen, wenn ich meine Anwendung ändere? – user482594

+0

Ja, Änderungen in Ihrer App bedeuten das Erstellen und erneute Bereitstellen einer neuen .rpm, genau wie das Aktualisieren eines normalen Pakets mit yum. – Unknown

+3

Sie müssen keine RPM-Datei erstellen - Sie können init-Skripte und chkconfig verwenden, ohne ein RPM zu erstellen. – TomG

-11

Haben forever auf AWS verwendet und es macht einen guten Job. Installieren

[sudo] npm install forever -g 

mit einer Anwendung verwenden, verwendet Hinzufügen

forever start path_to_application 

und die Anwendung zu stoppen

forever stop path_to_application 

This ein nützlicher Artikel, die mir geholfen, es mit der Einrichtung.

+0

Aber ich werde 'forever' Node-Modul bei jedem Boot-up ausführen müssen? – user482594

+0

Ja. Dies ist nützlich, wenn Sie Ihre App über die Shell ausführen und die Shell beenden möchten, ohne die App zu beenden. Es startet auch die App neu, falls die App bei einem Fehler beendet wird. – almypal

+1

Nein, für immer startet nicht bei jedem Hochfahren. –

5

Sie können ein Skript erstellen, starten und Ihre Anwendung stoppen und legen Sie es in /etc/init.d ; Stellen Sie sicher, dass das Skript den Konventionen von chkconfig (unten) entspricht, und verwenden Sie dann chkconfig, um es so einzurichten, dass es beim Start anderer Dienste gestartet wird.

Sie können ein vorhandenes Skript aus /etc/init.d auswählen, um es als Beispiel zu verwenden; this article beschreibt die Anforderungen, die im Grunde sind:

  • Eine ausführbare Skript, das die Shell (dh #/bin/bash!)
  • Ein Kommentar der Form # chkconfig benötigt identifiziert: wo oft 345, startprio zeigt an, wo in der Reihenfolge der Dienste zu starten, und Stopprio ist, wo in der Reihenfolge der Dienste zu stoppen. Ich wähle im Allgemeinen einen ähnlichen Dienst, der bereits existiert, und verwende ihn als Richtlinie für diese Werte (d. H. Wenn Sie einen webbezogenen Dienst haben, beginnen Sie auf den gleichen Ebenen wie httpd mit ähnlichen Start- und Stoppprioritäten).

Sobald Ihr Skript eingerichtet ist, können Sie

chkconfig --add yourscript 
chkconfig yourscript on 

verwenden und Sie sollten gut zu gehen. (Einige Distributionen erfordern möglicherweise eine manuelle Symlink-Verknüpfung zum Skript zu /etc/init.d/rc.d, aber ich glaube, dass Ihre AWS-Distribution das für Sie erledigt, wenn Sie das Skript aktivieren.

8

Sie können für immer verwenden- Service für die Bereitstellung von Knoten Skript als Dienst und starten automatisch bei Stiefeln. Befehle im Anschluss an das nötige tun,

npm install -g forever-service 
forever-service install test 

Dies wird Bereitstellung als Service im aktuellen Verzeichnis app.js über für immer. der Dienst wird jeder automatisch neu gestartet Das Zeitsystem wird neu gestartet.Wenn es gestoppt wird, versucht es einen ordnungsgemäßen Stopp. Dieses Skript stellt auch das logrotate Skript bereit.

Github url: https://github.com/zapty/forever-service

Ab jetzt für immer-Service Linux Amazon unterstützt, CentOS, Redhat Unterstützung für andere Linux-Distribution, Mac und Windows sind in den Werken ..

HINWEIS: Ich bin der Autor des forever- Bedienung.

+0

oder wie Sie eine beliebige App beim Start starten, ohne Code in der Instanz schreiben zu müssen. Danke! – Shide

+0

Das funktioniert nicht "forever-service muss als root ausgeführt werden" versucht "sudo forever-service install test" und amazon linux antwortet "sudo: forever-service: command not found" – jdog

0

Sie können screen verwenden.Führen Sie crontab -e und fügen Sie diese Zeile:

@reboot screen -d -m bash -c "cd /home/user/yourapp/; node app" 
0

Verwenden Elastic Beanstalk :) Bietet Unterstützung für die automatische Skalierung, SSL-Terminierung, blau/grün-Installationen, etc.