2012-06-30 19 views
38

¿Existe una breve guía para explicar cómo iniciar una aplicación cuando la instancia se inicia y se ejecuta? Si fuera uno de los servicios instalados a través del yum, entonces creo que puedo usar /sbin/chkconfig para agregarlo al servicio. (Para asegurarse, ¿es correcto?)¿Cómo puedo iniciar automáticamente una aplicación node.js en Amazon Linux AMI on aws?

Sin embargo, solo quiero ejecutar el programa que no se instaló a través del yum. Para ejecutar el programa node.js, tendré que ejecutar el script sudo node app.js en el directorio personal cada vez que se inicie el sistema.

No estoy acostumbrado a Amazon Linux AMI, así que no tengo problemas para encontrar una forma "correcta" de ejecutar algunos guiones automáticamente en cada arranque.

¿Hay una forma elegante de hacerlo?

+0

Pruebe esta solución. Es muy simple. http://stackoverflow.com/a/22171598/1028103 –

Respuesta

18

Una forma es crear un trabajo advenedizo. De esta forma, su aplicación se iniciará una vez que Linux se cargue, se reiniciará automáticamente si se bloquea y podrá iniciar/detener/reiniciarla por sudo start yourapp/sudo stop yourapp/sudo restart yourapp.

Aquí están empezando pasos:

1) Instalar la utilidad advenedizo (puede ser pre-instalados si se utiliza un AMI de Amazon Linux estándar):

sudo yum install upstart 

Para Ubuntu:

sudo apt-get install upstart 

2) Crear secuencia de comandos de inicio para su aplicación de nodo:

en /etc/init anuncio d archivo yourappname.conf con las siguientes líneas de código:

#!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) iniciar su aplicación por sudo start yourappname

+11

Por lo que sé, el Linux que se ejecuta en Amazon es derivado de RedHat, no derivado de Ubuntu, por lo tanto no No creo que advenedizo esté disponible. – Unknown

+0

Quizás. Ejecuto mi aplicación Node.js en Debian. –

+0

Gracias hombre - He estado tirando de mi pelo sobre esto. –

6

Una solución rápida para usted sería iniciar su aplicación en /etc/rc.local; solo agrega tu comando allí.

Pero si quieres ir a la manera elegante, que tendrá que empaquetar la aplicación en un archivo rpm, tienen una secuencia de comandos de inicio que va en /etc/rc.d para que pueda utilizar chkconfig en su aplicación, a continuación, instalar el rpm en tu instancia.

Tal vez this o this ayuda. (o simplemente google para "crear paquetes de rpm")

+0

Si utilizo el método rpm, ¿tengo que volver a generar el paquete rpm cada vez que modifico mi aplicación? – user482594

+0

Sí, los cambios en su aplicación significan crear y volver a implementar un .rpm nuevo, exactamente como actualizar un paquete regular usando yum. – Unknown

+3

No es necesario crear un archivo RPM; puede usar los scripts init y chkconfig sin crear un RPM. – TomG

-11

He usado forever en AWS y hace un buen trabajo. Instalar usando

[sudo] npm install forever -g 

Para agregar una aplicación utilice

forever start path_to_application 

y dejar de utilizar la aplicación

forever stop path_to_application 

This es un artículo útil que me ayudó con su puesta en marcha.

+0

¿Pero tendré que ejecutar el módulo de nodo 'forever' en cada arranque? – user482594

+0

Sí. Es útil en casos donde ejecuta su aplicación desde el shell y desea salir del shell sin detener la aplicación. También reinicia la aplicación en caso de que la aplicación finalice por un error. – almypal

+1

No, para siempre no se inicia en cada arranque. –

5

Puede crear un script que puede iniciar y detener la aplicación y colocarlo en /etc/init.d ; haga que el script se adhiera a las convenciones de chkconfig (abajo), y luego use chkconfig para configurarlo para que comience cuando se inicien otros servicios.

Puede elegir un script existente de /etc/init.d para usarlo como ejemplo; this article describe los requisitos, que son básicamente:

  • Una secuencia de comandos ejecutable que identifica la cáscara sea necesario (es decir, #/bin/bash!)
  • Un comentario de la forma # chkconfig: donde es a menudo 345, startprio indica dónde en el orden de los servicios para comenzar, y stopprio es donde en el orden de los servicios para detener. Generalmente selecciono un servicio similar que ya existe y lo uso como una guía para estos valores (es decir, si tiene un servicio relacionado con la web, comience en los mismos niveles que httpd, con prioridades de inicio y detención similares).

Una vez que el script está configurado, puede utilizar

chkconfig --add yourscript 
chkconfig yourscript on 

y usted debe ser bueno para ir. (Algunas distribuciones pueden requerir que haga un enlace simbólico manual al script en /etc/init.d/rc.d, pero creo que su distribución AWS lo hará por usted cuando active el script.

8

Puede usar forever- servicio para el aprovisionamiento de la escritura nodo como un servicio y se inicie automáticamente durante las botas. Después de comandos hará el necesario,

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

Esta disposición app.js en el directorio actual como un servicio a través de siempre. el servicio se reiniciará automáticamente cada se reiniciará el sistema horario. Además, cuando se detenga, intentará detenerse con elegancia. Este script también contiene el script logrotate.

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

A partir de ahora para siempre-servicio es compatible con Amazon Linux, CentOS, RedHat apoyo para las otras distribuciones de Linux, Mac y Windows están en obras ..

NOTA: Yo soy el autor de siempre: Servicio.

+0

o cómo iniciar cualquier aplicación que desee en el inicio sin tener que escribir código en la instancia ... ¡Gracias! – Shide

+0

Esto NO funciona obteniendo "para siempre, el servicio debe ejecutarse como root" intentado "sudo forever-service install test" y amazon linux responde "sudo: forever-service: comando no encontrado" – jdog

0

Puede usar screen.crontab -e ejecutar y añadir esta línea:

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

Uso Elastic Beanstalk :) Proporciona soporte para auto-escala, terminación SSL, los despliegues/verde azul, etc

Cuestiones relacionadas