Redis não iniciando com systemctl

3

Eu instalei o redis em uma máquina do Ubuntu 16.04 e se eu rodar o /usr/local/bin/redis-server /etc/redis/cluster/7000/redis.conf ele inicia e eu posso me conectar a ele sem problemas.

No entanto, quero iniciá-lo usando systemctl start redis , então criei o seguinte arquivo em /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

e a configuração de redis tem supervised systemd set

que eu acho que parece ser bom, mas recebo os seguintes erros:

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.

E eu nem sei ao certo o que isso significa, então alguém poderia me guiar na direção certa?

    
por munHunger 19.01.2018 / 16:41

2 respostas

3

Para executar os redis no systemd, você precisa definir supervised systemd .

Veja o arquivo de configuração:

# 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

Precisa ser alterado para:

supervised systemd

Você também pode passar isso na linha de comando, o que substitui a configuração em redis.conf . Sistemas baseados em Red Hat fazem isso. Isso também permite executar a mesma instância de redis manualmente ou a partir do systemd sem alterar o arquivo de configuração.

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

Além disso, você também precisa informar ao systemd que os redis estarão operando neste modo configurando Type=notify na seção [Service] .

    
por 19.01.2018 / 17:10
1

Como não posso adicionar um comentário devido à falta de reputação, por favor leve isso como um comentário para a resposta de Michael Hampston.

Ao modificar o arquivo systemd service, use o comando systemctl edit redis-server para criar uma substituição. Na janela de edição resultante, digite o seguinte:

[Service]
Type=notify

Salve e saia e termine a instalação apt install -f .

Se você modificar o serviço em /lib/systemd/system , perderá essas edições na próxima atualização.

Consulte: modifique o arquivo da unidade do systemd sem alterar o arquivo de unidade do desenvolvedor

PS: Essa pergunta me salvou de ter que coçar minha cabeça por muito tempo, pois acabei de encontrar o problema.

    
por 10.11.2018 / 04:50