linux - resueltos - Cómo ejecutar un script de shell en el inicio
scripts linux ejercicios resueltos (15)
En una instancia de Amazon Linux, tengo dos scripts llamados start_my_app
y stop_my_app
que comienzan y se detienen forever (que a su vez ejecuta mi aplicación node.js). Utilizo estos scripts para iniciar y detener manualmente mi aplicación de nodo. Hasta ahora tan bueno.
Mi problema: también quiero configurarlo para que start_my_app
se ejecute cada vez que se start_my_app
el sistema. Sé que necesito agregar un archivo dentro de init.d
y sé cómo init.d
al directorio apropiado dentro de rc.d
, pero no puedo averiguar qué es lo que realmente debe ir 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 ha funcionado para mí.
Así es como lo hago en sistemas de sombrero rojo.
Ponga su script en /etc/init.d
, propiedad de root y ejecutable. En la parte superior de la secuencia de comandos, puede 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 el script 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 en el inicio,
chkconfig --list apex
chkconfig --add apex
y puede utilizar el servicio de inicio / parada de vértice
El método más sencillo si solo quieres ejecutar un script simple (o cualquier cosa) es si tienes una interfaz gráfica de usuario para usar las preferencias del sistema y luego las aplicaciones de inicio.
solo navega hasta el script que quieras y ahí lo tienes. (hacer script ejecutable)
En el archivo que pones en /etc/init.d/
tienes que configurarlo como ejecutable con:
chmod +x /etc/init.d/start_my_app
Gracias a @meetamit, si esto no se ejecuta, debe 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 última versión de Debian, esto no funcionará ya que su script debe ser compatible con LSB (incluya, al menos, las siguientes acciones: iniciar, detener, reiniciar, forzar recarga y estado): https://wiki.debian.org/LSBInitScripts
Como nota, debe colocar la ruta absoluta de su script en lugar de una relativa, puede resolver problemas inesperados:
/var/myscripts/start_my_app
Y no te olvides de agregar encima de ese archivo:
#!/bin/sh
Establecer un crontab para esto
#crontab -e
@reboot /home/user/test.sh
Después de cada inicio ejecutará el script de prueba.
Ingresa a cron
usando sudo
:
sudo crontab -e
Agregue un comando para que se ejecute al iniciar, en este caso un script:
@reboot sh /home/user/test.sh
Salvar:
Presione ESC y luego: x para guardar y salir, o presione ESC y luego ZZ (eso es shift + zz)
Prueba prueba prueba
Ejecute su secuencia de comandos de prueba sin cron para asegurarse de que realmente funciona.
Asegúrese de guardar su comando en cron, use
sudo crontab -e
Reinicie el servidor para confirmar que todo funciona
sudo @reboot
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 la AMI de Amazon Linux, entonces funcionará.
Para Debian 9 vea 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í).
Puedes hacerlo :
chmod +x PATH_TO_YOUR_SCRIPT/start_my_app
entonces usa este comando
update-rc.d start_my_app defaults 100
Por favor, vea esta página en Cyberciti .
Sólo tienes que añadir una línea a tu crontab ..
Asegúrese de que el archivo es ejecutable:
chmod +x /path_to_you_file/your_file
Para editar el archivo crontab:
crontab -e
Línea que tienes que añadir:
@reboot /path_to_you_file/your_file
Que simple
Si quieres poner startup también puedes usar.
Primero mueva su script /etc/init.d luego chmod 777 /etc/init.d/su nombre del script
después de aplicar el siguiente comando
update-rc.d su script por defecto elimina update-rc.d -f su script remove
en el inicio se puede ver que su aplicación se ejecutará.
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 signo y el fondo arrastran el proceso y permite que rc.local continúe ejecutándose)
Si desea un script de inicio completo, la distribución debian tiene un archivo de plantilla, así que:
cp /etc/init.d/skeleton /etc/init.d/your_app
Y adaptarlo un poco.
para algunas personas esto funcionará. Simplemente, puede agregar el siguiente comando en Sistema> Preferencias> Aplicaciones de inicio:
bash /full/path/to/your/script.sh
This solución simple me funcionó en una instancia de Amazon Linux que ejecuta CentOS. Edite su archivo /etc/rc.d/rc.local
y ponga el comando allí. En este archivo se menciona que se ejecutará después de todos los demás scripts de inicio. Así que ten cuidado al respecto. Así es como se ve el archivo actualmente. . La última línea es el nombre de mi script.
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 línea de comando:
init=/path/to/myinit
Hacia el final del arranque, el kernel de Linux ejecuta el primer ejecutable de espacio de usuario en la ruta dada.
Varios proyectos proporcionan ejecutables de init
populares utilizados por las principales distribuciones, por ejemplo, systemd, y en la mayoría de las distribuciones, inicia un montón de procesos utilizados en el funcionamiento normal del sistema.
Pero podemos secuestrarlo /init
para ejecutar nuestros propios scripts mínimos para comprender mejor nuestro sistema.
Aquí hay una configuración mínima reproducible: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init
- Agregue su script al directorio /etc/init.d/
- Actualice los 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.