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

@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인스턴스화 된 단위 및 임시 단위는 표시하지 않습니다.
Evgeny Vereshchagin

10

man journalctl 말한다 :

-F, --field = 지정된 필드가 저널의 모든 항목에서 취할 수있는 모든 가능한 데이터 값을 인쇄합니다.

따라서 다음을 실행할 수 있습니다.

journalctl --field _SYSTEMD_UNIT

선택 가능한 단위 목록을 얻으려면 journalctl로그를 생성 할 수

(기본 루트 만하고 몇 가지 특별한 그룹의 구성원 인 사용자가 그룹의 구성원. 시스템 저널에 액세스하고 다른 사용자의 저널을 부여 systemd-journal, admwheel모든 저널 파일을 읽을 수 있습니다.)


해당 명령을 실행하려면 수퍼 유저 여야합니다. 그래서 확인하십시오 sudo journalctl --field _SYSTEMD_UNIT. 그러나 그렇지 않으면 통찰력을 추가해 주셔서 감사합니다.
CodeMed

실제로 sudo사용할 수는 journalctl없지만 사용자 세션과 직접 관련된 작은 단위 목록 만 얻습니다.
dragon788

현재 승인 된 답변에 제공된 systemd 219인수를 지원하지 않으므로 승인 된 답변이어야합니다 list-unit-files --all.
Petrus K.

list-unit-files는 단위 파일 만 보여줍니다. 인수없이 "systemctl"을 입력하면 비슷한 목록을 얻을 수 있습니다. 대부분은 저널링을 지원하지 않으므로 명령이 사용되지 않습니다.
프레드
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.