Redis起動スクリプトは起動時にpidファイルを作成することになっていますが、見つけることができるすべての設定を確認しました。pidファイルは作成されません。
私は次の方法でredisをインストールしました:
$ yum install redis
$ chkconfig redis on
$ service redis start
私の設定ファイル(/etc/redis.conf)で、これらが有効になっていることを確認しました:
daemonize yes
pidfile /var/run/redis/redis.pid
また、起動スクリプト(/etc/init.d/redis)には次のものが含まれています。
exec="/usr/sbin/$name"
pidfile="/var/run/redis/redis.pid"
REDIS_CONFIG="/etc/redis.conf"
[ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
[ -f $REDIS_CONFIG ] || exit 6
[ -x $exec ] || exit 5
echo -n $"Starting $name: "
daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG"
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $name: "
killproc -p $pidfile $name
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
これらは、デフォルトでインストール時に設定された設定です。 pidファイルが作成されない理由は何ですか? Monitに使用する必要があります。 (システムはRHEL 6.4 btwです)
問題は、ユーザーredisがpidファイル(またはそれが置かれていたディレクトリ)を作成する権限を持っていないことでした。修正:
Sudo mkdir /var/run/redis
Sudo chown redis /var/run/redis
それから私はredisを殺して再起動しました、そして確かに、redis.pidがありました
Ubuntu 18.04でも同じエラーが発生しました。
redis
によって報告されたエラー(/var/log/redis/redis-server.log
):# Creating Server TCP listening socket ::1:6379: bind: Cannot assign requested address
これは、このホストでIPv6を無効にしており、Ubuntuのredis-server
パッケージ(バージョン5:4.0.9-1)に付属しているためです:bind 127.0.0.1 ::1
/etc/redis/redis.conf
を編集して行にコメントを付けるか、::1
アドレスを削除すると、問題が解決します。例:# bind 127.0.0.1 ::1
CentOs 7では、ファイルに追加する必要があります。
$ vi /usr/lib/systemd/system/redis.service
次の行:
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
次に、サービスを再起動します。
$ Sudo systemctl daemon-reload
$ Sudo systemctl restart redis.service
参照:
ここから2018
開始する前に、私はUbuntu 18.04を使用しています。誰かが同じエラーを検索してここに来た場合は、これを書きました。
私の場合、エラーは同じですが、問題はとても異なります。ここで提案したソリューションは機能しませんでした。
そこで、ログが存在するかどうかを確認し、有用なものがないか探しました。それらを見つけた;
cat /var/log/redis/redis-server.log
ログを検索したところ、別のサービスがlistening same portであることが問題であることがわかりました。
2963:C 21 Sep 11:07:33.007 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2963:C 21 Sep 11:07:33.008 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=2963, just started
2963:C 21 Sep 11:07:33.008 # Configuration loaded
2974:M 21 Sep 11:07:33.009 # Creating Server TCP listening socket 127.0.0.1:6379: bind: Address already in use
誰が聞いているか確認した。
netstat anp | grep 6379
それを見つけた。
tcp6 0 0 :::6379 :::* LISTEN 3036/docker-proxy
別のツールでインストールしたredisのドッカー画像でした
root@yavuz:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6a94d401700 redis:3.2 "docker-entrypoint.s…" 20 hours ago Up 3 hours 0.0.0.0:6379->6379/tcp incubatorsuperset_redis_1
だから私はドッカー画像を停止しました
root@yavuz:~# docker stop incubatorsuperset_redis_1
そして、redis-serverは問題なく起動しました。
root@yavuz:~# systemctl start redis-server
root@yavuz:~# systemctl status redis-server
● redis-server.service - Advanced key-value store
Active: active (running) since Fri 2018-09-21 11:10:34 +03; 1min 49s ago
Process: 3671 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
私のDebianバスターでは、同じ問題に直面していました。
私の場合、エラーはredis-server.service: Can't open PID file /var/run/redis/redis-server.pid (yet?) after start: No such file or directory after starting redis server
でした。 Redisサーバーを再起動するたびに、同様の問題に直面していました。
編集nano /etc/systemd/system/redis.service
そして、この行を[Service]の下に追加します。
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
次のようになっているとします。
[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
ExecStop=/bin/kill -s TERM $MAINPID
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
PIDFile=/run/redis/redis-server.pid
次に:
Sudo systemctl daemon-reload
Sudo systemctl restart redis.service
Redis.serviceのステータスを確認します。
Sudo systemctl status redis.service