web-dev-qa-db-ja.com

RedisデーモンがPIDファイルを作成しない

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です)

18
jsmartt

問題は、ユーザーredisがpidファイル(またはそれが置かれていたディレクトリ)を作成する権限を持っていないことでした。修正:

Sudo mkdir /var/run/redis
Sudo chown redis /var/run/redis

それから私はredisを殺して再起動しました、そして確かに、redis.pidがありました

14
jsmartt

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

28
jgrocha

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

参照:

CentOs 7:SystemdとPIDファイル

12
Lenin Meza

ここから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)
2
Yavuz Selim

私の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

0
sebuhi