systemd服务在重新启动时不运行
我写了一个systemd
脚本,用于在ubuntu 16.04 LTS
服务器中使用dcoker-compose
启动dcoker-compose
容器。
这是脚本文件/etc/systemd/system/swoop.mongo.service
[Unit] Description=Swoop MongoDb Server container Requires=docker.service After=docker.service [Service] TimeoutStartSec=0 ExecStart=/usr/bin/docker-compose -f /var/www/swoop/docker-compose.yml up -d mongo3 mongo2 mongo1 mongosetup Restart=always RestartSec=10s Type=notify NotifyAccess=all [Install] WantedBy=local.target
当我启动与sudo systemctl start swoop.mongo.service
服务sudo systemctl start swoop.mongo.service
它运作良好。 当我重新启动服务器时,它会失败,服务的状态将变为不活动状态。
$ systemctl status swoop.app.service ● swoop.app.service - Swoop App Server container Loaded: loaded (/etc/systemd/system/swoop.app.service; disabled; vendor preset: enabled) Active: inactive (dead)
有一个选项--restart=always
为docker run
命令,如果你没有在运行容器的特殊要求,我会build议。
相同的概念适用于docker-compose
:
restart: always
政策:
-
no
:不要在退出时自动重启容器。 这是默认的。 -
on-failure[:max-retries]
:仅在容器以非零退出状态退出时重新启动。 (可选)限制Docker守护程序尝试重新启动的次数。 -
always
:始终重新启动容器,无论退出状态如何。 当你总是指定的时候,Docker守护进程会尝试无限期地重启容器。 无论容器的当前状态如何,容器也将始终在守护进程启动时启动。 -
unless-stopped
:始终重新启动容器,不pipe退出状态如何,但是如果容器之前已经处于停止状态,则不要在守护进程启动时启动它。
现在就您的systemd
服务而言,您需要启用该服务,以便在reboots
启动后自动reboots
。
sudo systemctl enable <service name>
更新:
您需要将WantedBy=local.target
replace为WantedBy=multi-user.target
multi-user.target:多用户,非graphics。 用户通常可以通过多个控制台或通过networkinglogin。