Не удается запустить сервер Redis на Centos 7 с systemctl - PullRequest
0 голосов
/ 03 сентября 2018

У меня проблемы с запуском Redis на CentOS7 с помощью systemctl. Что я должен сделать, чтобы устранить неполадки?

Я могу использовать обычную команду для запуска Redis. Как:

# /etc/init.d/redis start или же /usr/local/bin/redis-server /etc/redis/config.conf

А вот мой файл redis.service, который я положил в /lib/systemd/system:

[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
Type=forking
PIDFILE=/var/run/redis_6379.pid
ExecStart=/etc/init.d/redis start
ExecStop=/etc/init.d/redis stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Но когда я использую команду systemctl start redis, чтобы запустить сервер Redis. Я ничего не получил.

Я пытаюсь использовать systemctl status redis для чтения журнала systemctl, он показывает мне следующие сообщения:

● redis.service - Redis persistent key-value database
   Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
   Active: active (exited) since Fri 2018-08-31 15:45:37 CST; 2 days ago

Aug 31 15:45:37 redisserver001 systemd[1]: Starting LSB: start and stop redis_6379...
Aug 31 15:45:37 redisserver001 systemd[1]: Started LSB: start and stop redis_6379.
Aug 31 15:45:37 redisserver001 redis[24755]: /var/run/redis_6379.pid exists, process is already running or crashed
Sep 03 10:31:21 redisserver001 systemd[1]: [/usr/lib/systemd/system/redis.service:6] Unknown lvalue 'PIDFILE' in section 'Service'
Sep 03 10:33:13 redisserver001 systemd[1]: [/usr/lib/systemd/system/redis.service:6] Unknown lvalue 'PIDFILE' in section 'Service'
Sep 03 10:45:32 redisserver001 systemd[1]: [/usr/lib/systemd/system/redis.service:7] Unknown lvalue 'PIDFILE' in section 'Service'
Sep 03 11:08:28 redisserver001 systemd[1]: [/usr/lib/systemd/system/redis.service:7] Unknown lvalue 'PIDFILE' in section 'Service'

Следующие пункты - это ключевая конфигурация, которая, как мне кажется, может повлиять на работу Redis. Но я не знаю, где я делаю ошибки. Пожалуйста помоги. Большое спасибо.

pidfile /var/run/redis_6379.pid
daemonize yes
supervised systemd

1 Ответ

0 голосов
/ 03 сентября 2018

Если приложение указывает свойство «pidfile» в служебном файле, тогда приложение должно записать pid основного процесса в этот файл до завершения инициализации службы. Вы должны убедиться, что ваше приложение делает это. Systemd прочитает это значение и предотвратит создание другого разветвленного процесса, если пользователь выполнит «запуск systemctl», а файл pid уже существует. Судя по выводу, который вы разместили, systemd считает, что процесс redis уже запущен (из-за наличия файла pid и не создает новый). Вы можете установить pid в предложении ExecStartPost служебного файла. Что-то вроде:

ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'
...