無法在 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. 當啟動容器時,會執行單一腳本,在您的情況下tail -f /dev/null- 沒有其他腳本。 Ubuntu 容器不是完整的 ubuntu 虛擬機器!
  4. 常規的 ubuntu 啟動過程不會發生在容器內。你的服務從未被觸及。如何進行:
  5. docker run ...我建議檢查文件docker-compose的語法,而不是使用docker-compose.yaml
  6. 檢查參數commandentrypoint

相關內容