Redis не запускается с systemctl

Я установил redis на машине с Ubuntu 16.04, и если я запустил / usr / local / bin / redis-server /etc/redis/cluster/7000/redis.conf он запускается, и я могу без проблем подключиться к нему.

Однако я хочу запустить его, используя systemctl start redis , поэтому я создал следующий файл в / etc / systemd / system /redis7000.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/cluster/7000/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target

и конфигурация redis имеет контролируемый systemd набор

, который, на мой взгляд, выглядит неплохо, но я получаю следующие ошибки:

Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: Started Redis In-Memory Data Store.
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=21661, just started
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # Configuration loaded
Jan 19 14:54:27 ip-172-31-42-18 redis-server[21661]: 21661:C 19 Jan 14:54:27.680 # systemd supervision requested, but NOTIFY_SOCKET not found
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Main process exited, code=exited, status=1/FAILURE
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Unit entered failed state.
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Failed with result 'exit-code'.
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: redis7000.service: Service hold-off time over, scheduling restart.
Jan 19 14:54:27 ip-172-31-42-18 systemd[1]: Stopped Redis In-Memory Data Store.

И я даже не уверен, что это значит, может ли кто-нибудь направить меня в правильном направлении?

6
задан 19 January 2018 в 18:48
3 ответа

Чтобы запустить redis под systemd, вам нужно установить контролируемую systemd.

Смотрите файл конфигурации:

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised no

Нужно изменить на:

supervised systemd

Вы также можете передать это в командной строке, которая отменяет установку в redis.conf. Системы, основанные на Red Hat, делают это. Это также позволяет запускать один и тот же экземпляр redis вручную или из systemd без изменения конфигурационного файла.

ExecStart=/usr/bin/redis-server /etc/redis.conf --supervised systemd

Кроме того, вы также должны сообщить systemd, что redis будет работать в этом режиме, установив Type=notify в разделе [Service].

.
11
ответ дан 3 December 2019 в 00:03

Поскольку я не могу добавить комментарий из-за отсутствия репутации, примите это как комментарий к ответу Майкла Хэмпстона.

При изменении служебного файла systemd используйте команда systemctl edit redis-server для создания переопределения. В открывшемся окне редактирования введите следующее:

[Service]
Type=notify

Сохранить и выйти, затем завершить установку apt install -f .

Если вы измените службу в / lib / systemd / system , вы потеряете эти правки при следующем обновлении.

См .: изменить файл модуля systemd без изменения файла модуля восходящего потока

PS: Этот вопрос избавил меня от необходимости долго чесать голову, так как я только что столкнулся с проблемой.

5
ответ дан 3 December 2019 в 00:03

Один из способов отладки - скопировать строку ExecStart и выполнить ее на терминале, вы часто будете получать ошибку. Так что это даст вам больше подсказок для отладки и решения.

Я сделал то же самое, получил точную ошибку и решил ее.

0
ответ дан 3 December 2019 в 00:03

Теги

Похожие вопросы