serviço syslog-ng não inicia com o systemd mas o comando funciona bem

6

Eu tenho uma versão recentemente instalada no CentOS 7 uma vez que eu instalei o syslog-ng dos repositórios EPEL.

~: yum list | grep syslog
syslog-ng.x86_64                        3.5.6-1.el7                    @epel

Quando eu tento iniciá-lo via systemctl, ele falha da seguinte maneira:

/usr/lib/systemd/system: systemctl start syslog-ng
Job for syslog-ng.service failed. See 'systemctl status syslog-ng.service' and 'journalctl -xn' for details.

Ao olhar para os diários, podemos ver que é uma dependência do soquete que "inicia" bem, mas que o processo retorna um erro sobre os argumentos sendo incorretos, conforme mostrado abaixo:

May 07 17:26:15 superserver.company.corp systemd[1]: Starting Syslog Socket.
May 07 17:26:15 superserver.company.corp systemd[1]: Listening on Syslog Socket.
May 07 17:26:15 superserver.company.corp systemd[1]: Starting System Logger Daemon...
May 07 17:26:15 superserver.company.corp systemd[1]: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
May 07 17:26:15 superserver.company.corp systemd[1]: Failed to start System Logger Daemon.
May 07 17:26:15 superserver.company.corp systemd[1]: Unit syslog-ng.service entered failed state.
May 07 17:26:15 superserver.company.corp systemd[1]: syslog-ng.service holdoff time over, scheduling restart.
May 07 17:26:15 superserver.company.corp systemd[1]: Stopping System Logger Daemon...
May 07 17:26:15 superserver.company.corp systemd[1]: Starting System Logger Daemon...
May 07 17:26:15 superserver.company.corp systemd[1]: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT

Se olharmos para o arquivo de configuração do serviço, podemos confirmar a dependência no soquete e o comando usado para iniciar o serviço.

[Service]
Type=notify
Sockets=syslog.socket
ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid

O problema é que, se eu executar o comando above-mentionned, ele iniciará bem e funcionará como esperado.

A minha pergunta é: qual é a diferença entre eu executar o comando de inicialização do programa e o systemd iniciar o mesmo programa? O que posso fazer para descobrir o que está realmente errado?

Editar 1

Eu habilitei a saída de depuração sugerida por Raymond nas respostas e a saída não nos ensina muito mais.

May 08 10:31:29 server.corp systemd[1]: Starting System Logger Daemon...
May 08 10:31:29 server.corp systemd[1]: About to execute: /usr/sbin/syslog-ng -F -p /var/run/syslogd.pid
May 08 10:31:29 server.corp systemd[1]: Forked /usr/sbin/syslog-ng as 3121
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service changed dead -> start
May 08 10:31:29 server.corp systemd[1]: Set up jobs progress timerfd.
May 08 10:31:29 server.corp systemd[1]: Set up idle_pipe watch.
May 08 10:31:29 server.corp systemd[3121]: Executing: /usr/sbin/syslog-ng -F -p /var/run/syslogd.pid
May 08 10:31:29 server.corp systemd[1]: Got notification message for unit syslog-ng.service
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: Got message
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: got STATUS=Starting up... (Fri May  8 10:31:29 2015
May 08 10:31:29 server.corp systemd[1]: Got notification message for unit syslog-ng.service
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: Got message
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: got STATUS=Starting up... (Fri May  8 10:31:29 2015
May 08 10:31:29 server.corp systemd[1]: Received SIGCHLD from PID 3121 (syslog-ng).
May 08 10:31:29 server.corp systemd[1]: Child 3121 (syslog-ng) died (code=exited, status=2/INVALIDARGUMENT)
May 08 10:31:29 server.corp systemd[1]: Child 3121 belongs to syslog-ng.service
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
May 08 10:31:29 server.corp systemd[1]: syslog-ng.service changed start -> failed
May 08 10:31:29 server.corp systemd[1]: Job syslog-ng.service/start finished, result=failed
May 08 10:31:29 server.corp systemd[1]: Failed to start System Logger Daemon. 

Existem alguns avisos que são exibidos no início dos processos do syslog-ng (nada que o impeça de iniciar corretamente) então redirecionei toda a saída para / dev / null, mas o resultado final é o mesmo.

Além disso, como uma nota lateral, todo o meu sistema não inicializa mais se o systemd não conseguir o syslog. Isso pode ser desabilitado com opções do kernel para logar no kmesg.

    
por Antoine Benkemoun 07.05.2015 / 17:31

5 respostas

6

Tivemos o mesmo problema no Debian 8.1, mas o corrigimos alterando nossa configuração local do syslog-ng para usar unix-dgram em vez de unix-socket .

Eu estava acostumado com comentário no RedHat Bugzilla :

Note about custom syslog-ng configurations files

People with custom syslog-ng configurations will most likely face upgrade problems due to the unix socket type mismatch between systemd and syslog-ng old configuration file:

  • systemd creates /dev/log as unix-dgram
  • syslog-ng < 3.2.5 expected /dev/log to be unix-stream (configuration file)

If you use 'unix-stream ("/dev/log")' in one of your log messages sources, you will need to manually change it to 'unix-dgram ("/dev/log")'.

    
por 13.06.2015 / 17:04
1

Eu tive exatamente o mesmo problema (Debian 8.4, syslog-ng v3.5.6).

Tente comentar ou remover a seguinte linha no seu arquivo de configuração syslog-ng:

unix-dgram("/dev/log");

De link

    
por 30.05.2016 / 17:00
0

Talvez tente adicionar:

Environment=SYSTEMD_LOG_LEVEL=debug

Para o seu arquivo de unidade de serviço e, em seguida, ver o que despeja?

Eu também estou querendo saber se o systemd está tentando garantir que o syslog-ng seja iniciado com sucesso executando um

systemctl status syslog-ng

e porque não há nenhuma diretiva "status" correspondente em seu arquivo de unidade, ele supõe que o serviço não foi iniciado corretamente e mata o processo?

    
por 07.05.2015 / 18:05
0

corrigido adicionando isso ao syslog-ng.service: Depois = network.target

link

# cat /usr/lib/systemd/system/syslog-ng.service
[Unit]
Description=System Logger Daemon
Documentation=man:syslog-ng(8)
After=network.target

[Service]
Type=notify
Sockets=syslog.socket
ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid
ExecReload=/bin/kill -HUP $MAINPID
StandardOutput=null
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=syslog.service
    
por 20.04.2018 / 00:11
-1

Se descobrisse que usar outra coisa, então o ip (0.0.0.0) era motivo para travar. Então, especificando um endereço IP conhecido foi o problema.

Eu usei o syslog-ng 3.5.6.

    
por 20.01.2017 / 09:41