You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20.04 Docker容器内systemd自定义服务自启不生效问题

问题原因和解决方案

核心问题:Docker容器默认未以systemd作为1号进程运行

systemd必须作为容器的PID 1进程才能正常工作,默认启动Ubuntu镜像时默认入口为bash或其他命令,并未启动systemd,所以你已配置为开机自启的服务不会自动触发执行,服务配置本身没有错误。

具体修复步骤

1. 调整容器启动参数,开启systemd支持

启动容器时需要添加对应权限配置、挂载cgroup文件系统、指定systemd为入口进程,完整启动命令示例:

docker run -d \
  --name mydocker \
  --privileged \
  -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
  你使用的Ubuntu20.04镜像名

如果是已经创建好的容器,建议直接按上述参数重新创建容器,稳定性更高。

2. 确认systemd运行状态

容器启动后进入容器,执行ps 1,如果输出的COMMAND字段为/sbin/init,说明systemd已经正常作为1号进程运行。

3. 优化服务配置(可选)

你现有的my.service配置基本可用,因为服务是Type=oneshot类型,建议在[Service]段添加RemainAfterExit=yes参数,避免systemd误判服务状态为dead:

[Unit]
Description=my test
Documentation=man:test auto(8) man:test_config(5)

[Service]
ExecStart=/root/test.sh
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

修改后执行systemctl daemon-reload && systemctl enable my.service生效。

4. 验证效果

重启容器后进入容器,执行systemctl status my.service即可看到服务已正常运行,/usr/local/test.log也会有对应输出。

内容的提问来源于stack exchange,提问作者Jerry Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:54:08