无法在 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 VM!
  4. 常规的 ubuntu 启动过程不会在容器内发生。您的服务永远不会受到影响。如何继续:
  5. docker run ...我建议不要使用checkout 和文件docker-compose的语法docker-compose.yaml
  6. 检查参数commandentrypoint

相关内容