无法将应用程序作为服务启动,但可以作为独立进程运行

无法将应用程序作为服务启动,但可以作为独立进程运行

对于某个服务,虽然 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 上测试

来源:https://www.digitalocean.com/community/tutorials/how-to-install-cassandra-and-run-a-single-node-cluster-on-ubuntu-14-04 (检查步骤 3)

答案3

我将 Cassandra 2.0.9 迁移到 2.1.4 的解决方案

升级后

sudo apt-get install dsc21

转至日志文件:

tail -f /var/log/cassandra/system.log

您可以看到您需要修改您的 cassandra 配置文件。

  1. 停止 Cassandra

    sudo /etc/init.d/cassandra stop
    
  2. 转到 Cassandra 配置文件

    sudo vi /etc/cassandra/cassandra.yaml
    
  3. 注释掉这 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
  4. 启动 Cassandra

    sudo /etc/init.d/cassandra start
    
  5. 核实

    nodetool status
    

相关内容