Actualmente estoy tratando de entender la diferencia entre init.d
y cron @reboot
para ejecutar un script en el inicio / arranque del sistema.
El uso de @reboot
(este método fue mencionado en este foro por hs.chandra ) es algo más simple, simplemente entrando crontab -e
y creando ay@reboot /some_directory/to_your/script/your_script.txt
luego your_script.txt
se ejecutará cada vez que se reinicie el sistema. Una explicación en profundidad de @reboot
está aquí
Alternativamente, incrustando /etc/init.d/your_script.txt
en la segunda línea de su script, es decir:
#!/bin/bash
# /etc/init.d/your_script.txt
Puede ejecutar chmod +x /etc/init.d/your_script.txt
y eso también debería dar lugar a your_script.txt
que se ejecute cada vez que se inicia el sistema.
Q1: ¿Cuáles son las diferencias clave entre los dos?
Q2: ¿Cuál es más robusto?
P3: ¿Hay uno mejor de los dos?
P4: ¿Es esta la forma correcta de incrustar un script para que se ejecute durante el arranque?
Incorporaré un archivo bash .sh para ejecutar durante el inicio.
Respuestas:
init.d
, también conocido como script SysV, está destinado a iniciar y detener servicios durante la inicialización y apagado del sistema. (los/etc/init.d/
scripts también se ejecutan en sistemas habilitados para systemd por compatibilidad).start
ystop
más (consulte la política de Debian )crontab
(y por lo tanto@reboot
).@reboot
script (no solo root)multi-user.target
./etc/rc.local
a menudo se considera feo o en desuso (al menos por redhat ), todavía tenía algunas características agradables:rc.local
fue (casi) el último servicio en iniciarse.rc.local
se ejecuta despuésnetwork.target
de forma predeterminada (network-online.target
¡ no !)Con respecto a systemd
network.target
ynetwork-online.target
, lea Running Services después de que la red esté activa .fuente
/var/run/crond.reboot
archivo cada vez, si quiero, los trabajos de @reboot cron se ejecutan cada vez que se inicia el sistema. Si este archivo existeis @reboot cron jobs no se ejecutaránEn primer lugar, una aclaración está en orden:
httpd
ocron
En términos de si es mejor usar
rc.local
ocron
ejecutar su script, sospecho que es más una cuestión de estética más que de practicidad.cron
, como programador de tareas, está pensado como un método para realizar tareas de mantenimiento o mantenimiento de una máquina, como verificar actualizaciones, limpiar cachés o realizar auditorías de seguridad. Esto no significa que se limite a realizar esas funciones, ya que puede ejecutar cualquier script o comando deseado en el momento especificado (como@reboot
).El uso
rc.local
, por otro lado, caería más dentro de un tipo de tarea de configuración del sistema, ya querc.local
, al ser ejecutado por el sistema init de las máquinas, generalmente es responsable de establecer la configuración de red, los servicios o los entornos de las máquinas (pero nuevamente, no se limita a solo esta tarea).Sin embargo, ambos puntos deberían atenuarse por el hecho de que no todos los sistemas init ofrecen un
rc.local
mecanismo, y no todos los demonios cron ofrecen una@reboot
etiqueta psuedo.Puntos extra
Como se mencionó,
init.d
es el directorio que contiene los scripts que controlan los servicios que pueden iniciarse o detenerse en su sistema (al menos en máquinas que usan unSysV
sistema de tipo init). Dependiendo de su sistema init y el propósito de su script, puede ser razonable convertir su script en un script de inicio para que se ejecute de la misma manera que un servicio. Sin embargo, esto depende en gran medida de su sistema de inicio, ya que el marco que rodea la forma en que se construyen estos archivos puede diferir enormemente.Ultima palabra
También debe tenerse en cuenta que, por lo general, los scripts de bash terminan con un sufijo en
.sh
lugar de un.txt
, en lugar de un archivo de texto. Dicho esto, siempre que tenga un shebang (#!/bin/bash
) en la parte superior del archivo o se llame comobash /path/to/script.whatever
, no debería importar en términos de ejecución del script.fuente
bash
los scripts generalmente no terminan (y posiblemente no deberían) con unash
extensión..sh
lugar de.txt
": el significado específicosh
es más preciso como una extensión de nombre de archivo para las secuencias de comandos bash (u otras secuencias de comandos de shell) que lotxt
que normalmente denota texto sin formato. Puede usar cualquier extensión que lo haga reír, pero sería una convención común, si usar una extensiónsh
sería más apropiado y se usa comúnmente; aunque no es obligatorio, especialmente para los scripts que están destinados a ejecutarse desdePATH
.Estoy escribiendo mi respuesta a continuación;
Además de las diferencias mencionadas por otros usuarios anteriores, me gustaría destacar el punto de que @reboot depende de crond daemon. Depende del orden en que se inicia crond. Aunque la mayoría de los casos, crond comienza bien, pero puede fallar en algún momento para comenzar (al menos he visto algunas fallas en algunos de mis proyectos). Cuando escribe un guión de inicio, la falla generalmente ocurriría si hace algo mal en su guión (por ejemplo, confiar en un servicio que comenzará después de su servicio)
Basado en lo anterior, creo que init es más robusto. Pero hay otro punto mencionado por "Franklin Piat" en la primera respuesta. Por lo general, necesita un script de inicio para un demonio y debe seguir la política
No lo creo (rc.local es un poco viejo y obsoleto)
Si. Por lo general, los escritores de aplicaciones / paquetes hacen esto
fuente