Beim Start in Ubuntu kann kein Skript ausgeführt werden

Beim Start in Ubuntu kann kein Skript ausgeführt werden

Ich möchte beim Systemstart lediglich ein Skript ausführen und nach vielen Versuchen und dem Befolgen mehrerer Tutorials und Dokumentationen gelingt mir dies nicht.

Können Sie erkennen, was ich falsch mache?

Führen Sie Ubuntu 20.04 im Docker aus:

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

Stellen Sie eine Verbindung dazu her:

docker exec -it daemon /bin/bash

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

Legen Sie Berechtigungen fest und aktivieren Sie den Dienst:

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

Überprüfen Sie, ob es tatsächlich funktioniert:

service test restart
service test status

Die Ausgabe sollte folgendes sein:

stop
start

Entfernen Sie die Protokolldatei und beenden Sie die Sitzung:

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

Starten Sie den Container neu und stellen Sie erneut eine Verbindung her:

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

Überprüfen Sie, ob der Dienst tatsächlich aktiv ist:

service --status-all

Leider wurde es nie ausgeführt:

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

Es scheint, mit den RCs ist alles in Ordnung:

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

Antwort1

was ich aus Ihrer Frage verstanden habe: Sie möchten einen Ubuntu:20.04-Container starten und innerhalb dieses Containers soll ein zusätzlicher Dienst gestartet werden.

  1. es ist toll, dich in der Container-Unterstützer-Familie zu haben.
  2. Das von Ihnen beschriebene Problem hat nichts mit Ubuntu zu tun, es ist das Standardverhalten von Containern.
  3. Beim Starten eines Containers wird in Ihrem Fall ein einzelnes Skript ausgeführt tail -f /dev/null– sonst nichts. Ein Ubuntu-Container ist keine vollständige Ubuntu-VM!
  4. Der reguläre Ubuntu-Bootvorgang findet nicht in einem Container statt. Ihr Service wird nie berührt. So gehen Sie vor:
  5. statt dessen docker run ...empfehle ich das Auschecken docker-composeund die Syntax der docker-compose.yamlDatei
  6. Überprüfen Sie den Parameter commandoderentrypoint

verwandte Informationen