lista de unidades selecionáveis para journalctl

11

Em um servidor do CentOS 7, quero obter a lista de unidades selecionáveis para as quais journalctl pode produzir logs. Como posso alterar o código a seguir para realizar isso?

journalctl --output=json-pretty | grep -f UNIT | sort -u  

No terminal do CentOS 7, o código acima produz grep: UNIT: No such file or directory .

EDITAR:

O seguinte programa java está terminando sem imprimir nenhuma saída do grep desejado. Como posso alterar as coisas para que o programa java funcione além da versão do terminal?

    String s;
    Process p;
    String[] cmd = {"journalctl --output=json-pretty ","grep UNIT ","sort -u"};
    try {
        p = Runtime.getRuntime().exec(cmd);
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((s = br.readLine()) != null)
            System.out.println("line: " + s);
        p.waitFor();
        System.out.println ("exit: " + p.exitValue()+", "+p.getErrorStream());
        BufferedReader br2 = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        while ((s = br2.readLine()) != null)
            System.out.println("error line: " + s);
        p.waitFor();
        p.destroy();
    } catch (Exception e) {}  
    
por CodeMed 27.11.2014 / 23:51

2 respostas

17

journalctl pode exibir registros para todas as unidades - se essas unidades gravam no log é um assunto diferente.

Para listar todas as unidades disponíveis e, portanto, todas disponíveis para journalctl :

systemctl list-unit-files --all

Quanto ao seu código java, para que os pipes funcionem com Runtime.exec() , você pode colocar o comando em um script e invocar o script ou usar uma matriz de string, algo como:

String[] cmd = {"sh", "-c", "command1 | command2 | command3"};
p = Runtime.getRuntime().exec(cmd);

ou:

Runtime.getRuntime().exec(new String[]{"sh", "-c", "command1 | command2 | command3"});
    
por 28.11.2014 / 09:17
7

man journalctl diz:

-F, --field= Print all possible data values the specified field can take in all entries of the journal.

Então, você pode executar:

journalctl --field _SYSTEMD_UNIT

para obter a lista de unidades selecionáveis para as quais journalctl pode produzir logs

(por padrão, somente raiz e usuários que são membros de alguns grupos especiais recebem acesso ao diário do sistema e aos diários de outros usuários. Os membros dos grupos systemd-journal , adm e wheel podem leia todos os arquivos de diário.)

    
por 30.10.2015 / 11:50

Tags