Демон Redis не создает PID-файл

сценарий запуска Redis должен создать файл pid при запуске, но я подтвердил все настройки, которые я могу найти, и файл pid никогда не создается.

Я установил redis по:

$ yum install redis
$ chkconfig redis on
$ service redis start

в моем конфигурационном файле (/etc/redis.конф) я проверил, чтобы убедиться, что они были включены:

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 создан? Мне нужно использовать его для Монит. (Система RHEL 6.4 btw)

3 ответов


проблема заключалась в том, что у пользователя redis не было разрешения на создание файла pid (или каталога, в котором он был). Исправить:

sudo mkdir /var/run/redis
sudo chown redis /var/run/redis

затем я убил и перезапустил redis и, конечно же, был redis.пид


в 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


здесь с 2018

перед началом, я на Ubuntu 18.04.Я написал это, если кто-нибудь придет сюда. путем поиска той же ошибки.

в моем случае ошибка такая же, но проблема настолько отличается. Ни одно из предложенных здесь решений не сработало.

поэтому я проверил журналы, если они существуют и искали, есть ли что-нибудь полезное. Нашел их на;

cat /var/log/redis/redis-server.log

Поиск журналов и обнаружил, что проблема заключается в том, что другая служба слушает тот же порт.

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

поэтому я остановил docker image

root@yavuz:~# docker stop incubatorsuperset_redis_1

и redis-сервер запущен без проблем.

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)