Não é possível executar um script na inicialização no Ubuntu

Não é possível executar um script na inicialização no Ubuntu

Eu só quero executar um script quando o sistema for iniciado e, depois de muitas tentativas e seguindo vários tutoriais e documentação, não consigo fazer isso.

Você poderia identificar o que estou fazendo de errado?

Execute o Ubuntu 20.04 na janela de encaixe:

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

Conecte-se a ele:

docker exec -it daemon /bin/bash

Escrever /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;

Defina permissões e ative o serviço:

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

Verifique se realmente funciona:

service test restart
service test status

Deve produzir:

stop
start

Remova o arquivo de log e saia da sessão:

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

Reinicie o contêiner e conecte-se a ele novamente:

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

Verifique se o serviço está realmente ativo:

service --status-all

Infelizmente, nunca foi executado:

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

Parece que o RC está bem:

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

Responder1

o que entendi da sua pergunta: você deseja iniciar um contêiner ubuntu:20.04 e dentro desse contêiner deve iniciar um serviço adicional.

  1. é ótimo ter você na família dos apoiadores de containers.
  2. o problema que você descreve não está relacionado ao Ubuntu, é o comportamento padrão dos contêineres.
  3. ao iniciar um contêiner, um único script é executado, no seu caso tail -f /dev/null- nada mais. um contêiner do Ubuntu não é uma VM do Ubuntu completa!
  4. o processo normal de inicialização do Ubuntu não acontece dentro de um contêiner. seu serviço nunca é tocado. Como proceder:
  5. em vez de usar docker run ...recomendo fazer checkout docker-composee a sintaxe do docker-compose.yamlarquivo
  6. verifique o parâmetro commandouentrypoint

informação relacionada