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. 설명하는 문제는 우분투와 관련이 없으며 컨테이너의 기본 동작입니다.
  3. 컨테이너를 시작할 때 귀하의 경우에는 단일 스크립트가 실행됩니다 tail -f /dev/null. 우분투 컨테이너는 완전한 우분투 VM이 아닙니다!
  4. 일반적인 우분투 부팅 프로세스는 컨테이너 내부에서 발생하지 않습니다. 귀하의 서비스는 절대 건드리지 않습니다. 진행 방법:
  5. 사용하는 대신 체크아웃하고 파일 구문을 사용 docker run ...하는 것이 좋습니다.docker-composedocker-compose.yaml
  6. 매개변수를 확인 command하거나entrypoint

관련 정보