Debian: ¿Cómo ejecutar un script en el inicio sin tener que escribir 30 líneas de script de shell?

20

Tengo un servidor Debian y solo necesito ejecutar un script al inicio.

Leí eso: https://www.debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian

Obtuve ahora: insserv: advertencia: al script 'faltan etiquetas y anulaciones de LSB

Parece que tengo que agregar ahora:

### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

Ahora parece una locura: como 30 líneas de script solo para ejecutar un programa al inicio.

¿Existe una herramienta que permita hacerlo de una manera simple?

Saludos

Yarek
fuente
¿Qué tipo de guión es? ¿Has intentado ejecutarlo desde /etc/rc.local? Puede poner la ruta de la secuencia de comandos en el archivo rc.local y se ejecutará en el momento del arranque.
Diamant
un script simple que inicia un proceso de nodo, inicia un php, etc ...
yarek
Cuento 9 líneas, no 30. Y son comentarios, no script de shell (y no script SSH).
wurtel
Son encabezados LSB (consulte wiki.debian.org/LSBInitScripts ) y una plantilla de secuencia de comandos de inicio LSB está al norte de 70 líneas (vea cosas como github.com/fhd/init-script-template/blob/master/template ). Si desea que un solo comando se ejecute a mano para que lo maneje la computadora durante el arranque a través de algún archivo en / etc, ¡esto parece una ceremonia bastante elaborada!
kristopolous

Respuestas:

29

Si su script es "solo un script" y no inicia un demonio, considere usar /etc/rc.local(ejecutado como root) o crontab(ejecutado como un usuario de su elección).

Dos ejemplos:

  • /etc/rc.local

    #!/bin/sh -e
    #(Multiple lines of comments removed.)
    /usr/local/bin/your-script.sh
    exit 0
    
  • crontab(editado a través de, por ejemplo crontab -e)

    #(Multiple lines of comments removed.)
    @reboot /usr/local/bin/your-script.sh
    

Edición 1: solo lea su comentario: si su secuencia de comandos inicia demonios, que deberían ejecutarse todo el tiempo, aconsejaría no usar rc.localo crontab, y en su lugar escribir una init.dsecuencia de comandos adecuada (o múltiple ). De esta manera, usted / su sistema puede reiniciar / recargar / iniciar / detener, etc., los demonios.

Edición 2: lo llama loco, pero LSB tagsproporciona un valor: "Al documentar las dependencias de tiempo de ejecución para los scripts init.d, es posible verificar el orden de arranque actual, ordenar el arranque usando estas dependencias y ejecutar scripts de arranque en paralelo para acelerar el proceso de arranque ". Para más detalles, dirígete a la wiki de Debian .

(Por cierto: es una advertencia, así que en realidad depende de usted, cómo y qué hacer con esto).

gf_
fuente
Me gusta la versión crontab ... ¡pero no creo que @reboot funcione en debian!
yarek
@yarek: Funciona, usando esto yo mismo (para scripts, que son solo scripts).
gf_
2
funciona, pero creo que es solo para usuarios root, así que tienes que hacerlo@reboot root /usr/local/bin/your-script.sh
Froggiz
por cierto estaba hablando de Debian!
Froggiz
Todavía estoy bastante confundido: ¿cron permite ejecutar anyscript cuando el servidor se reinicia, no abre sesiones como root.
yarek
0

El supervisor también es una opción. Volverá a escribir algunas líneas para iniciar su nodo.js y PHP, pero serán menos.

adamo
fuente
0

Puede usar monitd para esto, solo escriba alguna definición de monit y comenzará demonios para usted. Pero, ¿por qué no usas la forma correcta con los scripts LSB? No es tan difícil escribirlo (lo estás escribiendo solo una vez) y es la forma más limpia y valiosa de cómo lograrlo.

Ondra Sniper Flidr
fuente