Ubuntu 16-即使启动条件失败,如何使Systemd继续尝试启动服务?

时间:2019-03-26 05:03:13

标签: ubuntu ubuntu-16.04 systemd

我有一个用于kafka的系统单元文件,如下所示。

[Unit]
Description=Apache Kafka server (broker)
Documentation=http://kafka.apache.org/documentation.html
After=network.target remote-fs.target kafka-zookeeper.service

[Service]
Type=simple
User=nano
Group=nano
Environment=JAVA_HOME=/usr/java/jdk1.8.0_102
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh

[Install]
WantedBy=multi-user.target
RestartSec=2s
Restart=always

Zookeeper单位文件。

[Service]
Type=simple
User=nano
Group=nano
Environment=JAVA_HOME=/usr/java/jdk1.8.0_102
ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh
RestartSec=2s
Restart=always

有时我发现kafka处于停止状态,并且systemctl status kafka.service向我显示以下消息

ubuntu@platform3:/usr/lib/systemd/system$ sudo systemctl status kafka.service
● kafka.service - Kafka Service
   Loaded: loaded (/usr/lib/systemd/system/kafka.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
Condition: start condition failed at Mon 2019-03-25 17:56:30 UTC; 10h ago

在检查日志时,似乎在执行sudo systemctl start kafka.service时Zookeeper未运行。因此,前提条件没有达到,kafka也没有启动。

但是一段时间后,动物园管理员启动并运行,但即使如此,卡夫卡也没有启动。有人可以让我知道是否有一种方法可以让systemd继续尝试启动kafka,而不是像现在这样,如果不满足前提条件就停止一次?

1 个答案:

答案 0 :(得分:0)

kafka-zookeeper.service中使用Require=而不是After=。这样就可以了,您的服务将首先查看Zookeeper是否正在运行,如果服务未运行,它将尝试启动它。

基于文档:http://manpages.ubuntu.com/manpages/bionic/man5/systemd.unit.5.html