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.