Hola, se que tiene siglos que no escribo nada.
NOTA: Me dice Google que tengo que poner una nota de las cookies por disposición Europea, yo no cree las cookies y no se que contengan, si las hay son de Google, Así que supongo ustedes sabrán si siguen leyendo o no este artículo.
Con los cambios a Stretch noto unos cambios y se ve que cada vez se impone más systemd en la configuración del sistema. Yo uso mucho el rc.local para ejecutar cosas en el arranque por ejemplo máquinas virtuales con virtualbox.
Que si quiere alguien una explicación de esto, escriban pidiéndolo y con gusto explico como.
Pero en Stretch veo que ni archivo /etc/rc.local existe, hay forma de activarlo y explico a continuación como.
Tal cual se explica aquí me ha funcionado en 4 sistemas 1 de ellos físico y 3 virtuales corriendo Debian 9 Stretch.
Primero copiemos el archivo ejemplo de la siguiente manera (todo lo hago como root)
cp /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service
El contenido del archivo es el siguiente: (Pueden crear directo el archivo rc-local.service dentro de /etc/systemd/system con este contenido)
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
#After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
#GuessMainPID=no
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Luego tenemos que hacer un enlace simbólico de esta manera:
cd /etc/systemd/system/multi-user.target.wants/
ln -s /etc/systemd/system/rc-local.service rc-local.service
ahora creamos el rc.local en etc
vi rc.local
#!/bin/bash
:wq
Importante poner la línea del comentario como si de un bash se tratara, me daba un error hasta que encontré un foro en RedHat donde explicaba que se pusiera esta línea y el error desapareció.
Ahora le damos permisos 755
chmod 755 rc.local
por ultimo lo vamos habilitar, ejecutar y verificar el status, debería estar funcionando ahora.
systemctl enable rc-local.service
systemctl start rc-local.service
systemctl status rc-local.service
Esto es lo que a mí me sale después de hacer estos pasos en las 4 computadoras que explicaba al principio que lo he probado
● rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/lib/systemd/system/rc-local.service; static)
Active: active (exited) since mié 2017-07-12 23:26:02 CDT; 1h 21min ago
Process: 815 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
jul 12 23:26:02 rc.local[815]: Restarting mysql (via systemctl): mysql.service.
jul 12 23:26:02 systemd[1]: Started /etc/rc.local Compatibility.
Ahora ya podemos colocar nuestros scripts dentro de rc.local recuerden que los scripts tienen que tener permiso de ejecución chmod +x
Espero les sirva cualquier duda o comentario, bien recibidos.
TIP en stretch mucha gente se queja que no hay ifconfig para ver su IP cosa que no es necesario por que con ip a s pueden verla hasta siendo usuario sin permisos, y si aun así quieren ifconfig.
apt install net-tools
ACTUALIZACION
Lamento mucho la situación pero nunca me notificó que tenia comentarios y estoy muy apenado, ahora que estoy actualizando los veo. Perdón por no contestar antes. Les platico que ahora estoy usando una computadora con ubuntu por que es la única que me acepta el driver de nvidia ni modo :(. Lo bueno es que sigue siendo Debian.
Y necesito esto en la versión 20.04.
Ahora mi archivo de /etc/systemd/system/rc-local.service
Contiene
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Esto sigue Vigente
cd /etc/systemd/system/multi-user.target.wants/
ln -s /etc/systemd/system/rc-local.service rc-local.service
Y el archivo /etc/rc.local
Contiene
#!/bin/bash
exit 0
Nota:(En algunos casos debe ser #!/bin/sh -e)
y claro levantar el servicio
systemctl enable rc-local.service
systemctl start rc-local.service
systemctl status rc-local.service
Gracias por su comentarios y espero les sirva esta actualización.
Hola Gerardo. Muchas gracias por tu post, me fue de gran ayuda. Aunque el error que comentabas solucionaste con el shebang de bash (#!/bin/bash), creo que se debe al link simbólico que utilizaste en el paso anterior -que es válido sólo en Redhat.
ResponderEliminarYo no utilicé dicho link, y el shebang ordinario del rc.local en Debian (#!/bin/sh -e) me funciona a la perfección.
Cordiales Saludos.
perdón pero hasta ahora veo que tengo comentario nunca me aviso. Estoy actualizando la entrada por su la quieres ver.Y tienes toda la razón con tu comando funciona perfectamente bien.
EliminarMuchas gracias por el tip.
ResponderEliminarcon mucho gusto, perdón pero hasta ahora veo que tengo comentario nunca me aviso. Estoy actualizando la entrada por su la quieres ver.
EliminarHola, seguí todos los pasos acá y otros y no me funcionó la ejecución de los script en rc.local.
ResponderEliminarAparece iniciado el servicio, pero no ejecuta nada con, #!/bin/bash y #!bin/sh y no me funciona.
Lo hice en un Debian x64 9.9
Muchas gracias de todos modos, veo que a otros les funciona, no sé si es un Debian a partir de la versión 9.9
Bye
Lamento mucho la situación pero nunca me notificó que tenia comentarios y estoy muy apenado, ahora que estoy actualizando los veo. Perdón por no contestar antes.Pero si quieres ve la actualización y lo requieres aun puedes verlo.
Eliminar