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
Anthon 2014年

@don_crissti如您所愿。
CodeMed

Answers:


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不显示实例化单位和瞬态单位。
Evgeny Vereshchagin

10

man journalctl 说:

-F,--field =打印指定字段可以在日记帐的所有条目中使用的所有可能的数据值。

因此,您可以运行:

journalctl --field _SYSTEMD_UNIT

获取可以为其journalctl生成日志的可选单元的列表

(默认情况下,只有root用户和谁是一些特殊群体成员的用户授予访问系统日志和其它用户的日志。该团体的成员systemd-journaladm以及wheel可以读取所有的日志文件。)


您必须是超级用户才能运行该命令。所以做吧sudo journalctl --field _SYSTEMD_UNIT。否则,谢谢您和+1能够增加见识。
CodeMed

实际上,如果您不能sudo使用journalctl,则只能使用一小部分与用户会话直接相关的单位列表。
dragon788 '18

这应该是可接受的答案,因为systemd 219它不支持list-unit-files --all当前接受的答案中提供的论据。
Petrus K.

list-unit-files仅显示单位文件。您只需输入不带参数的“ systemctl”,即可获得类似的列表。它们中的大多数不支持日志记录,因此该命令毫无用处。
弗雷德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.