我有一个用于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,而不是像现在这样,如果不满足前提条件就停止一次?
答案 0 :(得分:0)
在kafka-zookeeper.service
中使用Require=
而不是After=
。这样就可以了,您的服务将首先查看Zookeeper是否正在运行,如果服务未运行,它将尝试启动它。
基于文档:http://manpages.ubuntu.com/manpages/bionic/man5/systemd.unit.5.html