Para obter todos os erros para executar serviços usando journalctl
:
$ journalctl -p 3 -xb
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?
Para obter todos os erros para executar serviços usando journalctl
:
$ journalctl -p 3 -xb
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.
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 ).
Tags systemd systemd-journald