Como conseguir ver a mensagem de erro no journald

2

Eu criei um programa que intencionalmente tem uma divisão por erro zero.

Se eu o executar na linha de comando, ele retornará: "Exceção de ponto flutuante"

Mas se eu executar isso como um serviço systemd, não consigo ver essa mensagem de erro. No meu script systemd eu adicionei: StandardError = journal

Mas a mensagem de erro não é vista em nenhum lugar ao usar o journalctl. Como essa mensagem de erro pode ser adicionada ao log visto usando journalctl?

    
por Thomas 26.12.2016 / 21:52

3 respostas

1

Para obter todos os erros para executar serviços usando journalctl :

$ journalctl -p 3 -xb
    
por 21.07.2018 / 08:42
0

Por padrão, stdout e stderr de uma unidade systemd são enviados para o syslog. Então você pode acessá-los no arquivo /var/log/messages ou /var/log/dmesg .

Para mudar isso você pode usar este comando:

sudo journalctl -u [yourunit]

Onde [yourunit] é o nome do serviço do systemd. Por exemplo, para ver mensagens de yourapp.service,

sudo journalctl --unit=yourapp

, em seguida, reinicie o journalctl usando o comando

sudo systemctl restart systemd-journald

se isso não funcionar, adicione StandardOutput=syslog+console e StandardError=syslog+console ao seu script systemd e reinicie o systemctl. Depois disso, você pode acessar a saída da sua unidade usando o journalctl.

    
por 26.12.2016 / 22:52
0

Como o JdeBP está tentando sugerir, quando você executa seu programa a partir de um shell e ele é morto pelo sinal SIGFPE, a mensagem específica "Exceção de ponto flutuante" é impressa pelo seu shell . Tecnicamente, seu programa poderia capturar o sinal e imprimir um erro se você o escrevesse dessa forma - mas isso não funcionaria para o SIGKILL.

Você precisa de algum processo pai que usa wait() ou similar, para ler o status de saída do seu programa e fazer um log sobre ele. O systemd service manager é um dos pais. Sua mensagem não será idêntica, mas deve ter algo equivalente quando você olha para os logs do serviço no diário. Pode mencionar SIGFPE .

Além disso, se você tiver systemd-coredump ativado, esperamos que ele registre uma mensagem de falha para SIGFPE , já que a ação padrão desse sinal é gerar um dump principal. Essas mensagens de falha devem ser marcadas de forma que apareçam ao consultar as mensagens do seu serviço. Eu gosto de systemd-coredump e certifique-se de habilitá-lo em meus sistemas Debian, embora a instalação atual remova o Apport, o repórter de falhas no Ubuntu. Ao desenvolver, algumas pessoas podem preferir lidar diretamente com os arquivos principais e não usar systemd-coredump , embora seja bom que os core dumps não congestem seu diretório, além de que eles serão limpos depois de um tempo (liberando o espaço em disco ).

    
por 21.07.2018 / 09:30