Onde está / por que não há registro de serviços normais do sistema do usuário?

26

Estou tentando aprender o uso básico do systemd e encontrei um problema confuso com as unidades de serviço do usuário.

Ao executar serviços comuns com o systemctl, inicie o some.service , posso encontrar o log completo desse serviço (incluindo o que foi impresso em stdout / stderr, como eu o entendo) executando sudo journalctl --unit some.service .

Considere o exemplo de arquivo de serviço chatty.service :

[Service]
ExecStart=/usr/bin/echo "test from chatty.service"

Quando coloco esse arquivo de serviço em ~ / .config / systemd / user / chatty.service e o executo com systemctl --user start chatty.service, não consigo encontrar sua saída enviada para stdout no journalctl, nem no journalctl simples nem no journalctl - -user . Eu recebo apenas a seguinte saída em ambos:

Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Starting chatty.service...
Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Started chatty.service.

E journalctl --unit chatty.service não retorna nada (com ou sem --user não faz diferença).

Embora se eu mover o mesmo arquivo de serviço para / etc / systemd / system e executá-lo com o sudo systemd start chatty.service , recebo a seguinte saída ao executar o sudo journalctl --unit chatty.service :

Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Starting chatty.service...
Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Started chatty.service.
Jan 15 19:28:08 qbd-x230-suse.site echo[27098]: test from chatty.service

Parece que a unidade de serviço do usuário não está tão bem integrada de alguma forma, isso é esperado, estou faltando alguma coisa ou é um bug?

Estou executando o openSUSE 13.1 x86-64, com systemd 208 (instalação padrão).

Quantumboredom
fonte
O mesmo systemd 208 aqui no Arch Linux. Você pode usar journalctl --user --user-unit chattypara obter essas mensagens de início / parada do systemd, mas não o que o processo de eco gera, pelo menos no meu caso. Você pode receber a mensagem ecoada journalctl --userou usar outro filtro.
Lilydjwg

Respostas:

20

Use a --user-unitopção e, no seu caso ...

journalctl --user-unit chatty
elynnaie
fonte
Você também está recebendo a mensagem stdout "test from chatty.service" na saída do log ou apenas as "Iniciando chatty.service ..." e "Iniciado chatty.service". mensagens?
precisa
Sim, eu também consegui obter a saída do processo (ou seja, a mensagem "test from chatty.service").
elynnaie
Era isso que eu esperava, mas não vejo isso aqui. Posso perguntar qual sistema operacional (com versão) você está executando?
precisa
Arch Linux 3.13.7-1. systemd versão 212.
elynnaie 31/03
2
Eu vejo a saída no journalctl principal agora. Mas quando eu tento correr journalctl --usereu entendo No journal files were found.E journalctl --user-unit chattyisso não funcionou para mim.
CMCDragonkai
6

Necroposting, mas enfrentei e resolvi o mesmo problema hoje. Provavelmente journalctl --user-unit chattynão funcionou para você porque você o executa a partir do root. No entanto, por man journalctl, --user-unitfiltra as entradas de log não apenas por _SYSTEMD_USER_UNIT=, mas também por _UID=, e não há chattyserviço com o uid da raiz, portanto, nenhuma entrada é encontrada.

É provável que você também tenha tentado executar journalctl --user-unit chattycom o usuário habitual, mas conseguiu No journal files were found. Isso acontece porque (e todos os usuários têm acesso a seus diários por utilizador privado de man journalctlpode ser confuso aqui) em 2018 no meu Debian 9 journalctl ainda não é persistente por padrão ( Storage=autono /etc/systemd/journald.conf, e /var/log/journal/não existe), e não modo persistente journaldnão suporta registros de divisão, por isso todos os logs acabam em único lugar em /run/log/journalapesar do fato de que a divisão é ativado por padrão - veja SplitModeno man journald.conf. A ativação da persistência corrige isso.

TL; DR: permitir persistência, colocando Storage=persistentpara /etc/systemd/journald.confe recarregar journald com sudo systemctl restart systemd-journald.

Como alternativa, pesquise com sudo journalctl _SYSTEMD_USER_UNIT=chatty.service

Mais detalhes estão em https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html

ars
fonte
2
Obrigado. Eu estava recebendo No journal files were opened due to insufficient permissions.uma "dica" confusa sobre como definir permissões, mas não deveria ter que definir permissões porque estou tentando acessar os logs do usuário, não os logs do sistema. Sua correção funcionou. Muito Obrigado.
Rolf
3

Até o systemd v230 , era necessário usar o --user-unitsinalizador menos intuitivo para exibir os logs da unidade do usuário:

journalctl --user-unit chatty

Desde systemd v230, agora você pode combinar os sinalizadores --usere --unitconforme o esperado:

journalctl --user --unit chatty

A --user --unitsintaxe é suportada desde o Ubuntu 17.10.

Mark Stosberg
fonte
2
Eu não estou sur as obras "--user --unit" recurso no V230 ... correndo v232 aqui, e esse recurso não funciona
LeGEC