पत्रिका के लिए चयन इकाइयों की सूची


18

एक CentOS 7 सर्वर में, मैं उन चुनिंदा इकाइयों की सूची प्राप्त करना चाहता हूं जिनके journalctlलिए लॉग का उत्पादन कर सकते हैं। इसे पूरा करने के लिए मैं निम्नलिखित कोड कैसे बदल सकता हूं?

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

CentOS 7 टर्मिनल में, उपरोक्त कोड का उत्पादन होता है grep: UNIT: No such file or directory

संपादित करें:

निम्नलिखित जावा प्रोग्राम वांछित grep से किसी भी आउटपुट को प्रिंट किए बिना समाप्त कर रहा है। मैं चीजों को कैसे बदल सकता हूं ताकि टर्मिनल संस्करण के अलावा जावा प्रोग्राम काम करे?

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

"लेकिन नहीं जब मैं इसे जावा प्रोग्राम से कहता हूं" और जावा प्रोग्राम?
Braiam

इसमें एक टाइपो है, यह होना चाहिएgrep -F
एंथन नोव

@don_crissti जैसा आप चाहें।
कोडमेन्ड

जवाबों:


24

journalctl सभी इकाइयों के लिए लॉग प्रदर्शित कर सकता है - क्या ये इकाइयाँ लॉग को लिखती हैं यह अलग बात है।

सभी उपलब्ध इकाइयों की सूची और इसलिए journalctlउपयोग के लिए सभी उपलब्ध हैं:

systemctl list-unit-files --all

अपने जावा कोड के अनुसार, पाइप के साथ काम करने के लिए 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लेकिन आपको केवल इकाइयों की एक छोटी सूची मिलती है जो सीधे आपके उपयोगकर्ता के सत्र से संबंधित हैं।
ड्रैगन 88 --88

यह स्वीकृत उत्तर होना चाहिए क्योंकि वर्तमान में स्वीकृत उत्तर में दिए गए systemd 219तर्कों का समर्थन नहीं करता है list-unit-files --all
पेट्रस के।

सूची-इकाई-फाइलें सिर्फ इकाई फाइलें दिखाती हैं। आप बिना किसी तर्क के केवल "systemctl" लिखकर एक समान सूची प्राप्त कर सकते हैं। उनमें से ज्यादातर जर्नल का समर्थन नहीं करते हैं ताकि कमांड का कोई फायदा नहीं हो।
फ्रेड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.