elenco di unità selezionabili per journalctl


18

In un server CentOS 7, voglio ottenere l'elenco di unità selezionabili per le quali è journalctlpossibile produrre registri. Come posso modificare il seguente codice per ottenere questo risultato?

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

Nel terminale CentOS 7, produce il codice sopra grep: UNIT: No such file or directory.

MODIFICARE:

Il seguente programma Java sta terminando senza stampare alcun output dal grep desiderato. Come posso cambiare le cose in modo che il programma java funzioni oltre alla versione del terminale?

    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) {}  

"ma non quando lo chiamo da un programma Java" e dal programma Java?
Braiam,

C'è un errore di battitura in questo, dovrebbe esseregrep -F
Anthon,

@don_crissti Come desideri.
CodeMed,

Risposte:


24

journalctl può visualizzare i registri per tutte le unità - se queste unità scrivono nel registro è una questione diversa.

Per elencare tutte le unità disponibili e quindi tutte disponibili per journalctll'uso:

systemctl list-unit-files --all

Per quanto riguarda il tuo codice java, per far funzionare le pipe con Runtime.exec()te potresti mettere il comando in uno script e invocare lo script o usare un array di stringhe, qualcosa del tipo:

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

o:

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

list-unit-filesnon mostra unità istanziate e unità transitorie.
Evgeny Vereshchagin,

10

man journalctl dice:

-F, --field = Stampa tutti i possibili valori dei dati che il campo specificato può assumere in tutte le voci del giornale.

Quindi, puoi eseguire:

journalctl --field _SYSTEMD_UNIT

per ottenere l'elenco delle unità selezionabili per le quali è journalctlpossibile produrre registri

(per impostazione predefinita, solo root e gli utenti che sono membri di alcuni gruppi speciali sono concesso l'accesso alla rivista di sistema e le riviste di altri utenti. I membri dei gruppi systemd-journal, adme wheelin grado di leggere tutti i file di giornale.)


Devi essere un superutente per eseguire quel comando. Quindi fallo sudo journalctl --field _SYSTEMD_UNIT. Ma altrimenti grazie e +1 per l'aggiunta di informazioni.
CodeMed

In realtà, in caso contrario, sudoè possibile utilizzare journalctlma si ottiene solo un piccolo elenco di unità che sono direttamente correlate alla sessione dell'utente.
dragon788,

Questa dovrebbe essere la risposta accettata in quanto systemd 219non supporta gli argomenti list-unit-files --allforniti nella risposta attualmente accettata.
Petrus K.

list-unit-files mostra solo i file di unità. Puoi ottenere un elenco simile semplicemente digitando "systemctl" senza argomenti. La maggior parte di essi non supporta journald, pertanto il comando non è di alcuna utilità.
fred
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.