Cómo habilitar rc.local en Ubuntu, CentOS y AlmaLinux y ejecutarlo al reiniciar
En este artículo, examinaremos el método paso a paso para habilitar el archivo rc.local en distribuciones de Linux.

Cómo habilitar rc.local en Ubuntu, CentOS y AlmaLinux y ejecutarlo al reiniciar

Este artículo es una guía paso a paso para habilitar rc.local en sistemas Ubuntu, CentOS y AlmaLinux. Con este tutorial, los administradores de sistemas y los equipos de DevOps pueden ejecutar scripts fácilmente al arrancar el sistema.
0 acciones
0
0
0
0

 

¿Aún necesitas rc.local?

En esta guía paso a paso, aprenderemos cómo crear un archivo tradicional. rc.local en distribuciones de Linux comunes como Ubuntu, CentOS y AlmaLinux Habilite y ejecute los scripts o comandos necesarios en el momento del arranque.

A pesar de systemd Se ha vuelto común como inicialización predeterminada, rc.local Sigue siendo útil para ejecutar scripts cortos de forma rápida y sencilla durante el arranque. A continuación, se presentan métodos, ejemplos, consejos de seguridad y alternativas modernas.

 

Habilitar rc.local en Ubuntu (18.04, 20.04, 22.04 y superiores)

En las nuevas versiones de Ubuntu que systemd rc.local se puede habilitar de la siguiente manera. Los pasos generales incluyen crear el archivo, configurar los permisos y crear/habilitar una unidad para compatibilidad con systemd.

Pasos generales

  1. Crear archivo /etc/rc.local Y añade el shebang y los comandos deseados.
  2. Otorgar permiso de ejecución al archivo.
  3. Cree o habilite la unidad rc.local en systemd (si no existe).
  4. Cargar, activar y comprobar el estado del servicio.

Ejemplo de un archivo de muestra /etc/rc.local (Siempre al final) salida 0 Lugar):

#!/bin/bash
# Example: start Docker container named myapp
docker start myapp || docker run -d --name myapp myimage
# simple sysctl
/sbin/sysctl -w net.ipv4.ip_forward=1
exit 0

A continuación, configure el permiso:

sudo chmod +x /etc/rc.local

Si la unidad correspondiente no existe, créela:

sudo tee /etc/systemd/system/rc-local.service > /dev/null <<'EOF'
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

Y por último:

sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
sudo journalctl -u rc-local.service -b

 

Habilitación de rc.local en CentOS 7/8 y AlmaLinux 8/9

Las distribuciones basadas en RHEL tienen diferentes caminos; el camino tradicional suele ser /etc/rc.d/rc.local Los pasos generales son similares a Ubuntu, pero preste atención a la ruta y las notas de SELinux.

Rutas comunes

  • /etc/rc.d/rc.local La ruta tradicional está en RHEL/CentOS.
  • En algunos sistemas, el enlace puede /etc/rc.local Existir.

Pasos de activación (CentOS / AlmaLinux)

Crear/Editar archivo:

sudo nano /etc/rc.d/rc.local
#!/bin/bash
# Example: mount NFS or start a container
mount -a
/usr/bin/my-startup-script.sh &
exit 0

Licencia ejecutiva:

sudo chmod +x /etc/rc.d/rc.local

Si la unidad no existe, créela:

sudo tee /etc/systemd/system/rc-local.service > /dev/null <<'EOF'
[Unit]
Description=/etc/rc.d/rc.local Compatibility
ConditionPathExists=/etc/rc.d/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.d/rc.local start
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

Y luego:

sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
sudo journalctl -u rc-local.service -b
sudo restorecon -v /etc/rc.d/rc.local
# or temporarily change context
sudo chcon -t bin_t /etc/rc.d/rc.local

También es mejor utilizar rutas absolutas en scripts como /usr/bin/docker Úselo para reducir la dependencia de PATH.

 

Ejemplos prácticos y consejos prácticos

Ejemplo: Ejecutar el script del iniciador de Docker

#!/bin/bash
# start redis container at boot
/usr/bin/docker run -d --name redis-cache --restart unless-stopped redis:6
exit 0

Nota: Utilice la opción --reiniciar a menos que se detenga Hace que Docker maneje la reversión del contenedor.

Ejemplo: montaje de red antes de ejecutar el servicio

Si el script requiere montajes NFS, modifique la unidad systemd con las dependencias adecuadas:

[Unit]
After=network-online.target remote-fs.target
Wants=network-online.target remote-fs.target

Ejecutar un script largo o un servicio permanente: una mejor manera

Para tareas de larga duración u orientadas al servicio, es mejor crear una unidad systemd dedicada para usar funciones como Reiniciar y monitorear:

sudo tee /etc/systemd/system/myjob.service > /dev/null <<'EOF'
[Unit]
Description=My Long Running Job
After=network-online.target

[Service]
Type=simple
User=myuser
ExecStart=/usr/local/bin/my-long-script.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now myjob.service

 

Depuración común

  • Servicio en estado de fallo: De sudo journalctl -u rc-local.service -b Úselo para ver el registro.
  • Permisos: Asegúrese de que el archivo sea ejecutable (chmod +x) y el asunto existe desde el principio.
  • Rutas relativas: Utilice siempre rutas absolutas para los binarios.
  • Variables ambientales: rc.local tiene un entorno limitado; defina explícitamente variables como PATH o escriba la ruta completa.
  • SELinux: Compruebe los errores AVC y establezca el contexto.
  • Dependencias: Si el script depende de la red o del sistema de archivos, la unidad debe ser Después= y Quiere= Debería ser adecuado.

 

Alternativas y mejores prácticas

  • Unidad systemd dedicada: Es la mejor opción para servicios.
  • crontab @reboot: Adecuado para tareas de usuario sencillas:
    @reboot /usr/local/bin/myscript.sh
  • nube-init: Adecuado para la configuración inicial en entornos de nube.
  • Herramientas de gestión de configuración como Ansible: Se utiliza para realizar cambios repetibles y manejables.

 

Consejos de seguridad y funcionamiento

Desde la ejecución de comandos sensibles en rc.local Evitar. Es mejor ejecutar scripts con propiedad específica o usar el Usuario= Utilizado en systemd.

Registra siempre la salida del script y usa permisos limitados. Ejemplo:

/usr/local/bin/myscript.sh >> /var/log/rc.local.log 2>&1
chmod 700 /usr/local/bin/myscript.sh

Para entornos de producción, realice pruebas en un entorno de prueba antes de aplicar cambios a servidores críticos.

 

La relación de esta formación con los servicios de la empresa

Los servicios de nuestra empresa en más de 85 ubicaciones globales, incluidos VPS, servidores en la nube, servidores gráficos (GPU), servidores dedicados y redes, le permiten:

  • Ejecute scripts de inicio rápidamente en VPS comerciales o de juegos.
  • En servidores GPU, utilice unidades systemd para iniciar servicios pesados de modo que el procesamiento comience correctamente después del reinicio.
  • En servidores de red y anti-DDoS, cree unidades systemd personalizadas para ejecutar scripts de red e iptables.
  • El equipo de soporte está disponible para SELinux, rutas de montaje y dependencias.

 

Conclusión y sugerencias finales

A pesar de systemd, rc.local Sigue siendo una forma sencilla de ejecutar comandos personalizados durante el arranque, pero para mayor estabilidad y monitoreo es mejor usar unidades systemd.

Preste siempre atención a los permisos, SELinux y las dependencias del servicio, y utilice registros para la depuración.

Si tiene una necesidad específica (por ejemplo, ejecución de un robot comercial automatizado, preparación del entorno de la GPU o configuración de la red del servidor de juegos), nuestro equipo técnico está listo para ayudarlo en varias ubicaciones.

 

Preguntas frecuentes

También te puede gustar