Не удается запустить сервер 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.