Не удается запустить сервер Redis на Centos 7 с systemctl

У меня есть некоторые проблемы при запуске 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 запустить редис сервер. Я ничего не получил.

Я пытаюсь использовать 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 ответ

Решение

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

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

Вариант должен быть PIDFile(чувствительный падеж). На странице руководстваman systemd.service

PIDFile=
  Takes a path referring to the PID file of the service. Usage of this option is recommended for
  services where Type= is set to forking. The path specified typically points to a file below /run/. If
  a relative path is specified it is hence prefixed with /run/. The service manager will read the PID
  of the main process of the service from this file after start-up of the service. The service manager
  will not write to the file configured here, although it will remove the file after the service has
  shut down if it still exists. The PID file does not need to be owned by a privileged user, but if it
  is owned by an unprivileged user additional safety restrictions are enforced: the file may not be a
  symlink to a file owned by a different user (neither directly nor indirectly), and the PID file must
  refer to a process already belonging to the service.
Другие вопросы по тегам