对于某个服务,虽然 pid 文件存在,但是在尝试启动服务时仍然会失败,提示:
$ sudo service cassandra start
* could not access pidfile for Cassandra
我验证了/var/run
(所有者为 root) 下的文件夹权限,并且子文件夹 cassandra 由 cassandra 用户拥有,但即使我验证了 pid 文件存在,服务仍然无法访问 pid 文件。 (pid 也已分配)。那么为什么它说它无法访问 pidfile?
并且cassandra
作为独立进程运行就可以了,但不仅仅是使用service cassandra start
$ sudo ls -l /var/run/cassandra
total 4
-rw-r--r-- 1 cassandra cassandra 4 Mar 18 07:33 cassandra.pid
$ sudo su
# ls -ld /var/run/cassandra
dr--r----- 2 cassandra cassandra 60 Mar 18 07:38 /var/run/cassandra
我如何使用它来工作sudo service cassandra start
?
答案1
您必须删除/var/run/cassandra
文件夹,因此它具有错误的权限:
sudo rm -rf /var/run/cassandra
或者您可以手动修复权限:
sudo chmod 750 /var/run/cassandra
然后启动 Cassandra 作为服务:
sudo service cassandra start
一些解释
您可以找到文件权限的说明这里。
删除该文件夹是安全的,因为它会以正确的权限和内容重新创建。但是一旦它正常工作,请不要删除它。这可能会导致数据丢失或行为不正确。
chmod 750
解密为 rwxr-x--- 权限。它允许用户读写执行,组允许读取执行,而其他用户则不允许。对于 Cassandra,这样设置权限就足够了。
答案2
该解决方案可以通过以下方式实现:
$ sudo vim /etc/init.d/cassandra;
找到以下行:
CMD_PATT="cassandra.+CassandraDaemon"
替换为:
CMD_PATT="cassandra"
保存并停止并重新启动。服务将正确获取状态;在 Cassandra 2.3 上测试
答案3
我将 Cassandra 2.0.9 迁移到 2.1.4 的解决方案
升级后
sudo apt-get install dsc21
转至日志文件:
tail -f /var/log/cassandra/system.log
您可以看到您需要修改您的 cassandra 配置文件。
停止 Cassandra
sudo /etc/init.d/cassandra stop
转到 Cassandra 配置文件
sudo vi /etc/cassandra/cassandra.yaml
注释掉这 5 行或者删除它们:
multithreaded_compaction: false
preheat_kernel_page_cache: false
memtable_flush_queue_size: 4
in_memory_compaction_limit_in_mb: 64
compaction_preheat_key_cache: true
启动 Cassandra
sudo /etc/init.d/cassandra start
核实
nodetool status