journalctlの選択可能なユニットのリスト


18

CentOS 7サーバーで、journalctlログを生成できる選択可能なユニットのリストを取得したい。これを達成するために次のコードを変更するにはどうすればよいですか?

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

CentOS 7ターミナルでは、上記のコードはを生成しgrep: UNIT: No such file or directoryます。

編集:

次のJavaプログラムは、目的のgrepからの出力を出力せずに終了しています。ターミナルバージョンに加えてjavaプログラムが動作するように、どうすれば変更できますか?

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

「しかし、Javaプログラムから呼び出すときではありません」とJavaプログラム?
Braiam

タイプミスがあります、それがあるはずですgrep -F
アントン14年

@don_crisstiお望み通り。
CodeMed

回答:


24

journalctl すべてのユニットのログを表示できます-これらのユニットがログに書き込むかどうかは別の問題です。

使用可能なすべてのユニット、したがって使用可能なすべてのユニットを一覧表示journalctlするには:

systemctl list-unit-files --all

Javaコードに関しては、パイプを使用Runtime.exec()するには、コマンドをスクリプトに入れてスクリプトを呼び出すか、次のような文字列配列を使用します。

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

または:

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

list-unit-filesインスタンス化されたユニットと一時的なユニットは表示されません。
エフゲニーVereshchagin

10

man journalctl 言う:

-F、--field =指定したフィールドがジャーナルのすべてのエントリで取得できるすべてのデータ値を出力します。

したがって、次を実行できます。

journalctl --field _SYSTEMD_UNIT

journalctlログを生成できる選択可能なユニットのリストを取得する

(デフォルトでは、いくつかの特別なグループのメンバーであるルートのみ、ユーザーがグループのメンバー。システムジャーナルや他のユーザーの雑誌へのアクセスを許可されているsystemd-journaladmと、wheelすべてのジャーナルファイルを読み込むことができます。)


そのコマンドを実行するには、スーパーユーザーである必要があります。だからそれを作りますsudo journalctl --field _SYSTEMD_UNIT。しかしそうでなければ、洞察力を追加してくれてありがとうと+1。
CodeMed

実際にsudo使用できない場合は使用できますjournalctlが、ユーザーのセッションに直接関連するユニットの小さなリストしか取得できません。
dragon788

現在受け入れられている回答で提供されているsystemd 219引数をサポートしていないため、これは受け入れられた回答でなければなりませんlist-unit-files --all
ペトルスK.

list-unit-filesはユニットファイルのみを表示します。引数なしで「systemctl」と入力するだけで、同様のリストを取得できます。それらのほとんどはjournaldをサポートしていないため、コマンドは役に立ちません。
フレッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.