私は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
試してみましたが、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
?
答え1
通常、シェルでCtrl + Cを使用してプロセスを停止するとSIGINT
(割り込み信号)がプロセスに送信されます。 (望むよりman signal
)
systemdがデフォルトで(終了信号)に設定されたプロセスを送信せずにプロセスを停止しよExecStop=
うとするとプロセスの応答を待ち、期限内に停止できない場合、systemdは単にプロセスを強制終了する信号を送信します。 。 systemdの動作は変更することができます(参照:KillSignal=
SIGTERM
SIGKILL
KillSignal=
man systemd.kill
)。
KillSignal=SIGINT
あなたの場合は、通常シェルで使用されるCTRL + Cをシミュレートするために追加します。プロセスがこの信号を捕捉して応答することを知っていますが、SIGTERMにどのように応答するのかわかりません。
[Service]
Type=simple
ExecStart=/opt/kafka/bin/connect-standalone.sh /opt/kafka/config/connect-standalone.properties /opt/kafka/config/connect-file-source.properties
KillSignal=SIGINT
Restart=on-abort
答え2
HDP 2.6.4とKafka 0.10.1をインストールした後、スクリプトは次のことを報告します。
/usr/hdp/2.6.4.0-91/kafka/bin$ ./connect-standalone.sh
USAGE: ./connect-standalone.sh [-daemon] connect-standalone.properties
オプションをデーモンランの属性として使用してください-daemon
。
これはあなたに可能ですか?