список одиниць, що вибираються для журналу журналу


18

На сервері CentOS 7 я хочу отримати список вибраних одиниць, для яких journalctlможна створювати журнали. Як я можу змінити наступний код для цього?

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

У терміналі CentOS 7 наведений вище код grep: UNIT: No such file or directory.

Редагувати:

Наступна програма java завершується, не надруковуючи жодного виводу з потрібного зображення. Як я можу змінити речі, щоб програма 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?
Брайам

У цьому є помилка grep -F
друку

@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не показує ініціалізовані одиниці та перехідні одиниці.
Євгеній Верещагін

10

man journalctl каже:

-F, --field = Роздрукувати всі можливі значення даних, які вказане поле може приймати у всіх записах журналу.

Отже, ви можете запустити:

journalctl --field _SYSTEMD_UNIT

щоб отримати список вибраних одиниць, для яких journalctlможна створювати журнали

(За замовчуванням, тільки корені і користувачам , які є членами кількох спеціальних груп отримують доступ до журналу системи і журнали інших користувачів. Члени груп systemd-journal, admі wheelможе читати файли журнал.)


Ви повинні бути суперпользователем, щоб виконати цю команду. Тож зробіть це sudo journalctl --field _SYSTEMD_UNIT. Але інакше дякую та +1 за те, що ти додав розуміння
CodeMed

Насправді, якщо ви цього не sudoможете, ви можете використовувати journalctlлише невеликий список одиниць, безпосередньо пов’язаних із сеансом вашого користувача.
dragon788

Це має бути прийнятою відповіддю, оскільки systemd 219не підтримує аргументів, list-unit-files --allнаведених у відповіді, прийнятої в даний час.
Петрус К.

list-unit-файли просто показують файли одиниць. Ви можете отримати подібний список, просто ввівши "systemctl" без аргументів. Більшість з них не підтримує журнал, тому команда не приносить користі.
fred
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.