Shell脚本中停止本地Cassandra的命令及PID获取方式
Cassandra本地停止操作相关说明
标准停止命令
优先用官方自带的运维命令停止,避免直接杀进程导致内存数据未落盘丢失、节点下次启动故障:- 通用优雅停止:直接执行
nodetool stopdaemon,执行后会自动刷写内存数据、处理完存量请求后关闭进程,适配所有安装模式。 - 系统服务托管场景:如果是用yum/apt安装、默认注册了系统服务的Cassandra,直接执行
sudo systemctl stop cassandra(systemd环境)或者sudo service cassandra stop(老版本init环境)即可。 - 二进制包部署场景:如果是tar包解压部署、没配置全局环境变量,直接进入Cassandra安装目录执行
./bin/stop-server就行。
- 通用优雅停止:直接执行
无PID停止命令说明
上面列的三种官方停止方式都不需要手动传入PID,是生产环境推荐的停止方案,非必要不要直接用kill命令终止进程。Shell脚本获取Cassandra PID的方法
如果遇到进程卡死、官方停止命令失效等特殊场景需要拿PID做强制终止,两种方式稳定可用:- 启动时指定了PID文件的场景:如果启动Cassandra时加了
-p参数指定PID文件路径(比如cassandra -p /opt/cassandra/run/cassandra.pid),直接读取文件即可拿到PID,写法为cassandra_pid=$(cat /opt/cassandra/run/cassandra.pid),这种方式准确率100%,不会误匹配其他进程。 - 未配置PID文件的场景:通过Cassandra主进程的固定类名匹配获取,避免误匹配到带cassandra关键词的其他进程(比如grep进程、客户端命令进程),命令如下:
# 匹配Cassandra服务主进程拿PID cassandra_pid=$(ps aux | grep org.apache.cassandra.service.CassandraDaemon | grep -v grep | awk '{print $2}') # 也可以用pgrep简化写法 cassandra_pid=$(pgrep -f CassandraDaemon)
- 启动时指定了PID文件的场景:如果启动Cassandra时加了
内容的提问来源于stack exchange,提问作者ToastedBeans
相关产品推荐
相关产品推荐

