redis启动权限报错详解:Can't open the append-only file: Permission denied

根据官方文档翻译版(http://redisdoc.com/topic/cluster-tutorial.html)最小配置启动redis时报错,在源码中找到了错误的代码部分,具体问题及解决部分如下

1.redis目录结构如下,一共6个节点。其中的redis-server.sh脚本是通过GitHub检出的代码进行make的,GitHub地址:https://github.com/antirez/redis,下边有如何编译的过程,比较简单不再赘述

.
└── cluster-test
    ├── 7000
    │   └── redis.conf
    ├── 7001
    │   └── redis.conf
    ├── 7002
    │   └── redis.conf
    ├── 7003
    │   └── redis.conf
    ├── 7004
    │   └── redis.conf
    ├── 7005
    │   └── redis.conf
    ├── redis-cli
    ├── redis-server
    └── redis-trib.rb

2.redis.conf配置文件内容为官方提供的最小内容,内容如下

port 7000 #端口号每个节点需要调整
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

3.启动是报错,错误内容如下

➜  cluster-test ./redis-server ./7000/redis.conf
10269:C 24 Oct 2018 17:50:04.397 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
10269:C 24 Oct 2018 17:50:04.398 # Redis version=999.999.999, bits=64, commit=54e8dd11, modified=0, pid=10269, just started
10269:C 24 Oct 2018 17:50:04.398 # Configuration loaded
10269:M 24 Oct 2018 17:50:04.399 * Increased maximum number of open files to 10032 (it was originally set to 7168).
10269:M 24 Oct 2018 17:50:04.400 # Can't open the append-only file: Permission denied

4.分析问题是权限问题,对应的源码代码是server.c中的一部分代码,用来设置AOF文件的代码

/* Open the AOF file if needed. */
    if (server.aof_state == AOF_ON) {
        server.aof_fd = open(server.aof_filename,
                               O_WRONLY|O_APPEND|O_CREAT,0644);
        if (server.aof_fd == -1) {
            serverLog(LL_WARNING, "Can't open the append-only file: %s",
                strerror(errno));
            exit(1);
        }
    }

源码中server.aof_filename对应的是server.h头文件中声名的#define CONFIG_DEFAULT_AOF_FILENAME "appendonly.aof",这段代码中open函数的第一个参数为文件名或者文件的绝对路径,这里很显然是一个文件名。open第一个参数为文件名时,默认在当前路径下执行读取/创建文件操作,但是这时发现当前文件读写权限不够造成报错。给第一步中提到的所有目录设置读写权限,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值