Cómo ejecutar un script de shell al inicio

En una instancia de amazon linux, tengo dos scripts llamados start_my_app y stop_my_app que se inician y se detienen para siempre (que a su vez ejecuta mi aplicación node.js). Utilizo estos scripts para iniciar y detener manualmente mi aplicación de nodo. Hasta aquí todo bien.

Mi problema: también quiero configurarlo de modo que start_my_app se ejecute cada vez que se inicia el sistema. Sé que necesito agregar un archivo dentro de init.d y sé cómo init.d simbólicamente al directorio apropiado dentro de rc.d , pero no puedo descifrar qué necesita realmente dentro del archivo que init.d en init.d . Estoy pensando que debería ser solo una línea, como, start_my_app , pero eso no me ha funcionado.

En el archivo que pones en /etc/init.d/ tienes que configurarlo ejecutable con:

 chmod +x /etc/init.d/start_my_app 

Gracias a @meetamit, si esto no se ejecuta debes crear un enlace simbólico a /etc/rc.d/

 ln -s /etc/init.d/start_my_app /etc/rc.d/ 

Tenga en cuenta que en la versión más reciente de Debian, esto no funcionará, ya que su script debe ser compatible con LSB (proporcione, al menos, las siguientes acciones: inicio, detención, reinicio, recarga forzada y estado): https: //wiki.debian .org / LSBInitScripts

Como nota, debes poner la ruta absoluta de tu script en lugar de la relativa, ya que puede resolver problemas inesperados:

 /var/myscripts/start_my_app 

Y no te olvides de agregar encima de ese archivo:

 #!/bin/sh 

Establezca un crontab para esto

 #crontab -e @reboot /home/user/test.sh 

después de cada inicio, ejecutará el script de prueba.

Un enfoque simple es agregar una línea en /etc/rc.local :

 /PATH/TO/MY_APP & 

o si quieres ejecutar el comando como root:

 su - USER_FOOBAR -c /PATH/TO/MY_APP & 

(El símbolo comercial final muestra el proceso y permite que rc.local continúe ejecutándose)

Si desea un script de inicio completo, la distribución de Debian tiene un archivo de plantilla, entonces:

 cp /etc/init.d/skeleton /etc/init.d/your_app 

y adaptarlo un poco.

Esta es la forma en que lo hago en los sistemas red-hat

Coloque su script en /etc/init.d , propiedad de root y ejecutable. En la parte superior del script, puedes dar una directiva para chkconfig . Ejemplo, el siguiente script se usa para iniciar una aplicación java como usuario oracle.

El nombre del script es /etc/init.d/apex

 #!/bin/bash # chkconfig: 345 99 10 # description: auto start apex listener # case "$1" in 'start') su - oracle -c "cd /opt/apex ; java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";; 'stop') echo "put something to shutdown or kill the process here";; esac 

esto dice que la secuencia de comandos debe ejecutarse en los niveles 3, 4 y 5 y la prioridad para iniciar / detener es 99 y 10.

luego, como usuario root, puede usar chkconfig para habilitar o deshabilitar el script al inicio,

 chkconfig --list apex chkconfig --add apex 

y puede usar el servicio start / stop apex

Otra opción es tener un comando @reboot en tu crontab.

No todas las versiones de cron lo admiten, pero si su instancia se basa en AMI de Amazon Linux, funcionará.

Solo tiene una línea agregada a su crontab ..

Asegúrese de que el archivo sea ejecutable:

 chmod +x /path_to_you_file/your_file 

Para editar el archivo crontab:

 crontab -e 

Línea que debes agregar:

 @reboot /path_to_you_file/your_file 

¡Así de simple!

Ingrese cron usando sudo :

sudo crontab -e

Agregue un comando para ejecutar al inicio, en este caso un script:

@reboot sh /home/user/test.sh

Salvar:

Presione ESC luego: x para guardar y salir, o presione ESC luego ZZ (eso es shift + zz)

Prueba de prueba

  1. Ejecute su script de prueba sin cron para asegurarse de que realmente funciona.

  2. Asegúrate de haber guardado tu comando en cron, usa sudo crontab -e

  3. Reinicia el servidor para confirmar que todo funciona bien sudo @reboot

Puedes hacerlo :

 chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

luego usa este comando

 update-rc.d start_my_app defaults 100 

Por favor, mira esta página en Cyberciti .

Crea tu propio ejecutable / init

Esto no es lo que quieres, ¡pero es divertido!

Simplemente elija un archivo ejecutable arbitrario, incluso un script de shell , e inicie el kernel con el parámetro de la línea de comando:

 init=/path/to/myinit 

Hacia el final del arranque, el kernel de Linux ejecuta el primer ejecutable del espacio de usuario en la ruta determinada.

Varios proyectos proporcionan populares ejecutables de init utilizados por las principales distribuciones, por ejemplo, systemd, y en la mayoría de las distribuciones init bifurca una serie de procesos utilizados en el funcionamiento normal del sistema.

Pero podemos secuestrar /init para ejecutar nuestros propios scripts mínimos para comprender mejor nuestro sistema.

Aquí hay una configuración reproducible mínima: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init

Para Debian 9, consulte https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up . Me ha ayudado Versión corta para Debian 9: agregar comandos (como root) a /etc/rc.local

 /path_to_file/filename.sh || exit 1 # Added by me exit 0 

Probablemente, /path_to_file/filename.sh debería ser ejecutable (creo que sí).

El método más fácil absoluto si todo lo que desea ejecutar es un script simple, (o cualquier otra cosa) si tiene una interfaz gráfica de usuario para usar las preferencias del sistema> luego las aplicaciones de inicio.

solo busque el script que desea y listo. (hacer script ejecutable)

Esta solución simple funcionó para mí en una instancia de Amazon Linux que ejecuta CentOS. Edite su archivo /etc/rc.d/rc.local y coloque el comando allí. Se menciona en este archivo que se ejecutará después de todos los demás scripts de inicio. Así que ten cuidado en ese sentido. Así es como el archivo me busca actualmente. enter image description here . La última línea es el nombre de mi script.

  • Agregue su script al directorio /etc/init.d/
  • Actualice sus niveles de ejecución de rc: $ update-rc.d myScript.sh defaults NN donde NN es el orden en el que debe ejecutarse. 99 por ejemplo significará que se ejecutará después de 98 y antes de 100.

para algunas personas, esto funcionará. Simplemente podría agregar el siguiente comando en Sistema> Preferencias> Aplicaciones de inicio:

 bash /full/path/to/your/script.sh 

si quieres poner en marcha también puedes usar

primero mueva su script /etc/init.d luego chmod 777 /etc/init.d/su nombre de script

después de aplicar el siguiente comando

update-rc.d los ajustes predeterminados del script eliminan update-rc.d -f el script quita

al inicio, puede ver que se ejecutará su aplicación.

    Intereting Posts