¿Cómo agregar un script al inicio y apagado en Debian?

12

el título lo resume más o menos.

¿Cómo agrego un startup.sh y shutdown.sh de la aplicación de mi servidor a la secuencia de inicio y apagado del sistema operativo Debian?

Amir Arad
fuente

Respuestas:

15

En Debian, los scripts de inicio y apagado de servicio y aplicación deben colocarse en /etc/init.d/.

Debian proporciona un script de ejemplo /etc/init.d/skeletonque puede modificar a su gusto para su aplicación particular.

Una vez que esté en su lugar, llame al:

# update-rc.d YOURAPP defaults

Para que Debian agregue los /etc/rc?.d/enlaces simbólicos por usted.

Si prefiere un menú o una interfaz gráfica, eche un vistazo al paquete sysv-rc-confo ksysv.

MikeyB
fuente
4

Puede llamar a su script desde /etc/rc.local , antes de la línea que dice exit 0

En cuanto a cerrar su aplicación, sugeriría poner un script en /etc/rc0.d . Debe nombrarlo con una K mayúscula , y luego un número de 2 dígitos que especifique el orden en que se ejecutan estos scripts, y luego un nombre. Se llamará con un parámetro "stop", pero puede ignorar esto para un script de parada simple.

Brent
fuente
¿Por qué harías cosas con rc.local cuando ya tienes que jugar con /etc/rcX.d de todos modos?
womble
rc.local es el lugar adecuado para cosas simples de inicio: no es necesario que se ocupe de los parámetros de inicio / detención, etc. Pero no tiene la capacidad de cerrar un proceso. El material rc0.d es un poco hack.
Brent
3

Para el inicio, mira esto .

Para el apagado, cree un enlace / copie su script en una de las carpetas /etc/rcX.d donde X es el nivel de ejecución en el que desea que se ejecute. 0 es el nivel de ejecución de cierre de Debian, creo.

squillman
fuente
Esta es la información de cierre que necesitaba. Gracias por esto, @quillman.
Harperville
1

Lo más fácil es modificar los scripts existentes, funciona en mi sistema, se usa para sonidos :)

  • iniciar, modificar /etc/init.d/rc.local, agregar su sh al final del archivo, antes: (se ejecutará justo antes de iniciar sesión "pantalla")
  • apague, modifique /etc/init.d/halt, agregue su sh al comienzo del archivo, justo después de los comentarios iniciales (se ejecutará antes del comando de apagado real, que es llamado por este archivo de script
  • reiniciar, igual que apagar, pero en /etc/init.d/reboot
chickensk
fuente
1

Desde Debian Jessie, el viejo initprograma ha sido reemplazado por systemd!

Compruébalo tú mismo. Ejecutar: ls -l /sbin/inity ver a qué apunta. En estos días apunta a systemd( /sbin/init -> /lib/systemd/systemd), un programa de inicialización más nuevo y mejor.


¡¡¡Así que las respuestas elegidas y otras aquí ahora están desactualizadas !!!


* Si bien aún puede instalar scripts a la antigua usanza con las herramientas de System-V, no es una buena idea en general.

man systemd.service dice:*

Si se solicita un servicio con un nombre determinado pero no se encuentra el archivo de configuración de la unidad, systemd busca un script de inicio SysV con el mismo nombre ... y crea dinámicamente una unidad de servicio a partir de ese script. Esto es útil para la compatibilidad con SysV. Tenga en cuenta que esta compatibilidad es bastante completa pero no 100%.


Para sistemas Debian más nuevos (es decir, Jessie, Stretch, Buster, etc.)

Es más fácil de lo que piensas. (-:

Este es el método nuevo y preferido para instalar programas de arranque o apagado.

Con systemdusted primero desea crear un archivo de unidad . Un archivo de unidad es principalmente declaraciones, no código.

Luego usará el systemctlcomando para habilitar o iniciar esa unidad.

systemdhace gran parte del trabajo por usted, lo que facilita, por ejemplo, que un programa crítico se reinicie automáticamente si se bloquea o si se mata. También cierra su programa dónde y cuándo debería, por defecto, sin trabajo adicional de su parte.


Comience a aprender sobre systemdaquí:

A partir de Debian y en otros lugares y etc y etc .


Páginas de manual para comenzar:

man systemd.unit - Acerca de los archivos de la unidad en general
man systemd.service - Acerca de los archivos de la unidad de servicio, por ejemplo, demonios y programas de ejecución única.

man systemctl - Interfaz de usuario de línea de comando
man journalctl- Ver registro de lo que ha hecho systemd

man systemd - Sobre el programa init en sí


También hay una variedad de otros tipos de archivos unitarios, p. Ej.

man systemd.target - Para grupos y objetivos comunes sincronizados.

Una vez que haya digerido los conceptos básicos anteriores, man -k systemdbusque para encontrar otras páginas de manual relacionadas.



Hagas lo que hagas, en Debian no uses ninguno de estos :

  • update-rc.d --instalar y eliminar enlaces de script de inicio de estilo System-V
  • sysv-rc-conf - Configuración de nivel de ejecución para SysV como enlaces de script de inicio
  • runlevel - Imprima el nivel de ejecución SysV anterior y actual
  • BUM- B oot U P M anager - un editor gráfico de nivel de ejecución
  • systemadm- Interfaz gráfica para el administrador de sistemas y servicios systemd
    (Por cierto, el autor me dijo por correo electrónico que ahora está demasiado roto).


UN EJEMPLO:

Este archivo de unidad inicia el demonio NoIP.com cuando inicio, y lo cierra cuando lo apago.

Este demonio, de vez en cuando, envía mi dirección IP actual para actualizar mi DDNS ( D ynamic DNS ( D Omain N AME S erver)) base de datos del proveedor, lo que mantiene mi nombre de dominio que señala en la computadora dondequiera que vayan a.

Los archivos de esta unidad se encuentran en mi sistema en este archivo de configuración: /etc/systemd/system/noip2.service

Esto es lo que hay en el archivo de la unidad:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

Ejecute manualmente un archivo de unidad (por ejemplo, para pruebas):

  • comenzar con $ sudo systemctl start noip2.
  • reiniciar con $ sudo systemctl restart noip2.
  • detener con $ sudo systemctl stop noip2.

Configure el sistema para ejecutar automáticamente un archivo de unidad al iniciar o apagar:

  • comience a usar con $ sudo systemctl enable noip2.
  • terminar de usar con $ sudo systemctl disable noip2.

Ver registro

  • $ sudo journalctl -u noip2
Vista elíptica
fuente