我使用 CentOS 7,我想将 Kafka 独立生产者(文件连接器)作为服务启动。命令是:
/opt/kafka/bin/connect-standalone.sh /opt/kafka/config/connect-standalone.properties /opt/kafka/config/connect-file-source.properties
而且,显然,它没有停止命令。通常,我只是Ctrl+C将其作为前台进程停止。
但是当我测试时,我发现打开几个终端控制台会话来运行几个进程(Zookeeper、Kafka 服务器、Kafka 生产者、Storm jar 等)非常繁琐,所以我将 Zookeeper 和 Kafka 服务器更改为服务,它们有他们的stop
脚本。但在这种情况下,没有。
我试过systemctl start kafka-producer
and systemctl stop kafka-producer
,但服务进入failed
状态,并没有停止。我不得不删除服务,重新加载守护进程,然后再次切换到手动。
kafka-producer.service
:
[Unit]
Description=Kafka Producer
After=network.target
[Service]
Type=simple
ExecStart=/opt/kafka/bin/connect-standalone.sh /opt/kafka/config/connect-standalone.properties /opt/kafka/config/connect-file-source.properties
Restart=on-abort
[Install]
WantedBy=default.target
无论如何要在没有ExecStop
命令的情况下操纵服务?
如果您通常在 shell 中使用 CTRL+C 停止该进程,
SIGINT
则会向该进程发送一个(中断信号)。(见man signal
)当 systemd 尝试停止进程而不
ExecStop=
发送KillSignal=
默认为SIGTERM
(终止信号)的进程时,等待进程的响应,如果它未能在截止日期内停止,则 systemd 发送一个SIGKILL
简单地强制结束进程的进程。systemd 的行为可以通过KillSignal=
(参见参考资料)进行修改man systemd.kill
。在您的情况下,我会尝试添加
KillSignal=SIGINT
以模拟您通常在 shell 中使用的 CTRL+C。您知道您的进程捕获并响应此信号,但我们不知道它如何响应 SIGTERM。脚本报告说,安装了带有 Kafka 0.10.1 的 HDP 2.6.4
使用选项作为守护进程运行的属性
-daemon
。这对你来说可行吗?