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.