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


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.