No se puede ejecutar un script al iniciar en Ubuntu

No se puede ejecutar un script al iniciar en Ubuntu

Solo quiero ejecutar un script cuando se inicia el sistema, y ​​después de muchos intentos y de seguir múltiples tutoriales y documentación, no puedo hacerlo.

¿Podrías detectar qué estoy haciendo mal?

Ejecute Ubuntu 20.04 en la ventana acoplable:

docker run -d --name daemon ubuntu:20.04 tail -f /dev/null

Conéctate a él:

docker exec -it daemon /bin/bash

Escribir /etc/init.d/test:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          Join the Swarm
# Default-Start:     4
# Default-Stop:      0 6
# Description:       Join the Swarm
### END INIT INFO
start(){
        /usr/bin/echo start >> /var/log/test.log
}
stop(){
        /usr/bin/echo stop >> /var/log/test.log
}

case "$1" in
  start)
    start;;
  stop)
    stop;;
  status)
    cat /var/log/test.log;;
  restart)
    stop;
    start;
    ;;
  *);;
esac
exit 0;

Establezca permisos y habilite el servicio:

chmod 755 /etc/init.d/test
update-rc.d test defaults 91
update-rc.d test enable

Comprueba que realmente funciona:

service test restart
service test status

Debería generar:

stop
start

Elimine el archivo de registro y salga de la sesión:

rm -rf /var/log/test.log
exit

Reinicie el contenedor y conéctese nuevamente:

docker restart daemon
docker exec -it daemon /bin/bash

Compruebe que el servicio esté realmente activo:

service --status-all

Lamentablemente nunca se ejecutó:

root@407a8e2c90ee:/# service test status
cat: /var/log/test.log: No such file or directory

Parece que los RC están bien:

root@407a8e2c90ee:/# ls /etc/rc*.d
/etc/rc0.d:
K01test

/etc/rc1.d:

/etc/rc2.d:

/etc/rc3.d:

/etc/rc4.d:
S01test

/etc/rc5.d:

/etc/rc6.d:
K01test

/etc/rcS.d:
S01procps

Respuesta1

Lo que entendí de tu pregunta: deseas iniciar un contenedor ubuntu:20.04 y dentro de este contenedor deberías iniciar un servicio adicional.

  1. Es fantástico tenerte en la familia de partidarios de los contenedores.
  2. El problema que usted describe no está relacionado con Ubuntu, es el comportamiento predeterminado de los contenedores.
  3. al iniciar un contenedor se ejecuta un único script, en su caso tail -f /dev/null, nada más. ¡Un contenedor de Ubuntu no es una máquina virtual de Ubuntu completa!
  4. El proceso de arranque normal de Ubuntu no ocurre dentro de un contenedor. Su Servicio nunca se toca. Cómo proceder:
  5. en lugar de usar docker run ...recomiendo pagar docker-composey la sintaxis del docker-compose.yamlarchivo
  6. comprobar el parámetro commandoentrypoint

información relacionada