- ¿Aún necesitas rc.local?
- Habilitar rc.local en Ubuntu (18.04, 20.04, 22.04 y superiores)
- Habilitación de rc.local en CentOS 7/8 y AlmaLinux 8/9
- Ejemplos prácticos y consejos prácticos
- Depuración común
- Alternativas y mejores prácticas
- Consejos de seguridad y funcionamiento
- La relación de esta formación con los servicios de la empresa
- Conclusión y sugerencias finales
- Preguntas frecuentes
¿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
- Crear archivo /etc/rc.local Y añade el shebang y los comandos deseados.
- Otorgar permiso de ejecución al archivo.
- Cree o habilite la unidad rc.local en systemd (si no existe).
- 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 0A continuación, configure el permiso:
sudo chmod +x /etc/rc.localSi 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
EOFY 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 0Licencia ejecutiva:
sudo chmod +x /etc/rc.d/rc.localSi 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
EOFY 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 -bsudo restorecon -v /etc/rc.d/rc.local
# or temporarily change context
sudo chcon -t bin_t /etc/rc.d/rc.localTambié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 0Nota: 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.targetEjecutar 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
EOFsudo 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.shPara 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.









