Ubuntu の起動時にスクリプトを実行できない

Ubuntu の起動時にスクリプトを実行できない

システムの起動時にスクリプトを実行したいのですが、何度も試行し、複数のチュートリアルとドキュメントに従った後でも、実行できません。

私が何を間違っているのかわかりますか?

docker で Ubuntu 20.04 を実行します。

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

接続します:

docker exec -it daemon /bin/bash

書く/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;

権限を設定し、サービスを有効にします。

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

実際に動作するか確認します:

service test restart
service test status

次のように出力されるはずです:

stop
start

ログ ファイルを削除してセッションを終了します。

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

コンテナを再起動して再度接続します。

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

サービスが実際にアクティブであることを確認します。

service --status-all

残念ながら、実行されませんでした:

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

RC は問題ないようです:

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

答え1

あなたの質問から私が理解したのは、ubuntu:20.04 コンテナを起動し、このコンテナ内で追加のサービスを起動する必要があるということです。

  1. コンテナ サポーター ファミリーにあなたを迎えることができて嬉しいです。
  2. あなたが説明している問題は Ubuntu に関連するものではなく、コンテナのデフォルトの動作です。
  3. コンテナを起動すると、1 つのスクリプトが実行されます。この場合tail -f /dev/null、他には何も実行されません。Ubuntu コンテナは完全な Ubuntu VM ではありません。
  4. 通常の Ubuntu ブート プロセスはコンテナー内では実行されません。サービスは一切変更されません。手順:
  5. 代わりにチェックアウトしてファイルの構文を確認するdocker run ...ことをお勧めしますdocker-composedocker-compose.yaml
  6. パラメータをチェックアウトするcommandentrypoint

関連情報