Bookie使用提供命令不能正常停掉,no bookie to stop,

./pulsar-daemon stop bookie
./pulsar-daemon stop bookie -force

两种方式都尝试了,停不掉

停不掉是因为已经没有 bookie 进程可停了 :rofl:
可以通过 jps 查进程 PID, 或者 netstat 查端口,确认下进程状态。

进程在的,关不掉,大佬看看

Hi @lvdelu ,后台进程通常使用 pid 文件定位进程,如果找不到 pid 文件,就会导致无法启停进程。

常见的场景包括:

  1. 同一台机器部署了多个服务,需要进正确的目录执行命令(在 bin 目录下应该有进程的 pid );
  2. 误删除了 pid;

下面演示下场景 2:

# 默认 pid 会在 pulsar 的 bin 目录,请注意下方的 pulsar-broker.pid

[pulsar@mysql-server-for-ranger pulsar-1]$ ll bin
总用量 84
-rwxr-xr-x 1 pulsar pulsar  6966 1月  22 2020 bookkeeper
-rwxr-xr-x 1 pulsar pulsar  5361 1月  22 2020 function-localrunner
drwxr-xr-x 2 pulsar pulsar    53 6月   1 07:52 proto
-rwxr-xr-x 1 pulsar pulsar 16281 6月   6 08:12 pulsar
-rwxr-xr-x 1 pulsar pulsar  1073 1月  22 2020 pulsar-admin
-rwxr-xr-x 1 pulsar pulsar  3495 1月  22 2020 pulsar-admin-common.sh
-rw-rw-r-- 1 pulsar pulsar     6 6月   7 14:44 pulsar-bookie.pid
-rw-rw-r-- 1 pulsar pulsar     6 6月   7 15:22 pulsar-broker.pid
-rwxr-xr-x 1 pulsar pulsar  3542 1月  22 2020 pulsar-client
-rwxr-xr-x 1 pulsar pulsar  5838 1月  22 2020 pulsar-daemon
-rwxr-xr-x 1 pulsar pulsar 11590 1月  22 2020 pulsar-managed-ledger-admin
-rwxr-xr-x 1 pulsar pulsar  6091 1月  22 2020 pulsar-perf
-rw-rw-r-- 1 pulsar pulsar     6 6月   7 14:44 pulsar-zookeeper.pid

[pulsar@mysql-server-for-ranger pulsar-1]$ cat bin/pulsar-broker.pid
29159
[pulsar@mysql-server-for-ranger pulsar-1]$ jps
23440 QuorumPeerMain
24087 Main
29159 PulsarBrokerStarter
22171 Jps
23868 QuorumPeerMain
23645 QuorumPeerMain
24381 Main
24686 Main

# 当 pid 出现被误删除等

[pulsar@mysql-server-for-ranger pulsar-1]$ mv bin/pulsar-broker.pid bin/pulsar-broker.pid.bak

# 再执行命令,将出现同样现象
[pulsar@mysql-server-for-ranger pulsar-1]$ bin/pulsar-daemon stop broker
doing stop broker ...
no broker to stop

以上,可以排查下执行的目录是否准确,或者 pid 是否损坏。

我觉得这个是bug,进程在就是停不掉。是不是停止的方法要进行改进一下呢?

目前大部分系统通常的做法是基于pid文件来停止,如果不按照这种方式,当一台机器部署了多个bookie,可能就不好处理了,有什么好的建议可以帮忙推荐下 :slightly_smiling_face:

基于pid文件没有问题,但是当使用kill pid 30s都没有杀死的时候,是不是应该在31秒的时候要使用kill -9 pid方式再杀一次会好点?