Eu tenho um serviço systemd de usuário simples configurado da seguinte forma:
[Unit]
Description=Bot
AssertPathExists=/home/mikel/discord-bot/
[Service]
WorkingDirectory=/home/mikel/discord-bot/
ExecStart=/home/mikel/anaconda3/bin/python -u bot.py parameters.json
Restart=always
RestartSec=3
[Install]
WantedBy=default.target
Essencialmente, todo o serviço é executado em um script python.
No entanto, quando olho para o journalctl
do serviço, vejo que, em vez de os logs aparecerem como acontecem no script, tudo é liberado imediatamente quando o serviço é interrompido (com o mesmo timestamp para cada linha ).
Isso sugere que algum buffer está ocorrendo em algum lugar que está impedindo que ele seja gravado no journalctl imediatamente. No entanto, mesmo quando eu desligo o buffer interno do Python com -u
, o problema ainda ocorre.
Uma solução que encontrei é envolvê-la no comando unbuffer
do pacote expect
, assim:
ExecStart=/usr/bin/unbuffer /home/mikel/anaconda3/bin/python -u bot.py parameters.json
No entanto, enquanto isso funciona, significa que journalctl mostra "unbuffer [PID]" em vez de "python [PID]", e eu quero uma solução que não envolva a instalação de pacotes externos para o que parece ser uma tarefa simples.
Existe alguma outra maneira de remover esses buffers para que a saída seja liberada para o journalctl, já que ela é proveniente do python?