我在使用 systemd 在启动时运行 Docker 容器时遇到了一个非常具体的问题。
容器使用以下脚本成功启动和停止:
启动容器
#!/usr/bin/env bash
sleep 5
docker start container_name
停止容器
#!/usr/bin/env bash
sleep 5
docker stop container_name
但是,当我使用 systemd 配置以下服务时,它无法成功运行:
[Unit]
Description=Docker Container
After=network.target
After=systemd-user-sessions.service
After=network-online.target
After=multi-user.target
[Service]
User=root
Type=simple
ExecStart=/home/seed/scripts/start-container.sh
ExecStop=/home/seed/scripts/stop-container.sh
TimeoutSec=60
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10
[Install]
WantedBy=default.target
答案1
绝对路径是 Shell 脚本成功的关键。
为什么不不使用主目录脚本(这在服务中不是一个好的做法):
[Unit]
Description=Docker Container
After=network.target
After=systemd-user-sessions.service
After=network-online.target
After=multi-user.target
[Service]
User=root
Type=simple
ExecStart=/usr/bin/docker start -a container_name
ExecStop=/usr/bin/docker stop -t 5 container_name
TimeoutSec=60
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10
[Install]
WantedBy=default.target
祝您码头作业愉快!