journalctl için seçilebilir birimler listesi


18

Bir CentOS 7 sunucusunda, journalctlgünlükleri üretebilen seçilebilir birimlerin listesini almak istiyorum . Bunu yapmak için aşağıdaki kodu nasıl değiştirebilirim?

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

CentOS 7 terminalinde yukarıdaki kod üretilir grep: UNIT: No such file or directory.

DÜZENLE:

Aşağıdaki java programı, istenen grep'ten herhangi bir çıktı yazdırılmadan sonlandırılıyor. Terminal sürümüne ek olarak java programının çalışması için işleri nasıl değiştirebilirim?

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

"ama bir java programından çağırdığımda değil" ve Java program?
— 14:18

Bunda bir yazım hatası var, öyle olmalıgrep -F
— Anthon

@don_crissti İstediğiniz gibi.
— CodeMed

Yanıtlar:


24

journalctl tüm birimlerin günlüklerini görüntüleyebilir - bu birimlerin günlüğe yazıp yazmadığı farklı bir konudur.

Kullanılabilir tüm birimleri listelemek ve bu nedenle journalctlkullanıma açık olanları listelemek için :

systemctl list-unit-files --all

Java kodunuza gelince, boruların çalışmasını sağlamak Runtime.exec()için komutu bir komut dosyasına koyabilir ve komut dosyasını çağırabilir veya aşağıdaki gibi bir dize dizisi kullanabilirsiniz:

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

veya:

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

list-unit-filessomutlaşmış birimler ve geçici birimler göstermez.
— Evgeny Vereshchagin

10

man journalctl diyor:

-F, --field = Belirtilen alanın günlükteki tüm girişlerinde alabileceği tüm olası veri değerlerini yazdırın.

Böylece çalıştırabilirsiniz:

journalctl --field _SYSTEMD_UNIT

journalctlgünlükleri üretebilen seçilebilir birimlerin listesini almak için

(varsayılan, yalnızca kökü ve birkaç özel grupların üyesi olan kullanıcılar tarafından gruplarının üyeleri. Sistem dergi erişimi ve diğer kullanıcıların dergi verilir systemd-journal, admve wheeltüm günlük dosyalarını okuyabilir.)


Bu komutu çalıştırmak için bir süper kullanıcı olmalısınız. Öyleyse yap sudo journalctl --field _SYSTEMD_UNIT. Aksi takdirde, görüşlerinizi eklediğiniz için teşekkür ederiz.
— CodeMed

Aslında sudokullanamazsanız, journalctlancak yalnızca kullanıcı oturumunuzla doğrudan alakalı olan küçük bir birim listesi alırsınız.
— dragon788

Bu kabul cevap olarak olmalıdır systemd 219argümanlar desteklemiyor list-unit-files --allşu anda kabul cevap verilmektedir.
— Petrus K.

list-unit-files sadece birim dosyalarını gösterir. Sadece argüman olmadan "systemctl" yazarak benzer bir liste alabilirsiniz. Çoğu dergiyi desteklemediğinden komutun bir faydası olmaz.
— fred
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.