Journalctl의 선택적 단위 목록

Journalctl의 선택적 단위 목록

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

답변1

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"});

답변2

man journalctl설명하다:

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

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

journalctl --field _SYSTEMD_UNIT

journalctl로그를 생성할 수 있는 선택적 단위 목록 가져오기

(기본적으로 일부 특수 그룹의 구성원인 루트 및 사용자에게만 시스템 로그 및 기타 사용자 로그에 대한 액세스 권한이 부여됩니다. 그룹 구성원 systemd-journal, adm및 은 wheel모든 로그 파일을 읽을 수 있습니다.)

관련 정보