<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 18.4 systemd-journald.service 簡介 過去只有 rsyslogd 的年代中,由于 rsyslogd 必須要開機完成并且執行了 rsyslogd 這個 daemon 之后,登錄文件才會開始記錄。所以,核心還得要自己產生一個 klogd 的服務, 才能將系統在開機過程、啟動服務的過程中的信息記錄下來,然后等 rsyslogd 啟動后才傳送給它來處理~ 現在有了 systemd 之后,由于這玩意兒是核心喚醒的,然后又是第一支執行的軟件,它可以主動調用 systemd-journald 來協助記載登錄文件~ 因此在開機過程中的所有信息,包括啟動服務與服務若啟動失敗的情況等等,都可以直接被記錄到 systemd-journald 里頭去! 不過 systemd-journald 由于是使用于內存的登錄文件記錄方式,因此重新開機過后,開機前的登錄文件信息當然就不會被記載了。 為此,我們還是建議啟動 rsyslogd 來協助分類記錄!也就是說, systemd-journald 用來管理與查詢這次開機后的登錄信息,而 rsyslogd 可以用來記錄以前及現在的所以數據到磁盤文件中,方便未來進行查詢喔! ![鳥哥的圖示](https://box.kancloud.cn/2016-05-13_5735736501917.gif "鳥哥的圖示") **Tips** 雖然 systemd-journald 所記錄的數據其實是在內存中,但是系統還是利用文件的型態將它記錄到 /run/log/ 下面! 不過我們從前面幾章也知道, /run 在 CentOS 7 其實是內存內的數據,所以重新開機過后,這個 /run/log 下面的數據當然就被刷新,舊的當然就不再存在了! ### 18.4.1 使用 journalctl 觀察登錄信息 那么 systemd-journald.service 的數據要如何叫出來查閱呢?很簡單!就通過 journalctl 即可!讓我們來瞧瞧這個指令可以做些什么事? ``` [root@study ~]# journalctl [-nrpf] [--since TIME] [--until TIME] _optional 選項與參數: 默認會秀出全部的 log 內容,從舊的輸出到最新的訊息 -n :秀出最近的幾行的意思~找最新的信息相當有用 -r :反向輸出,從最新的輸出到最舊的數據 -p :秀出后面所接的訊息重要性排序!請參考前一小節的 rsyslogd 信息 -f :類似 tail -f 的功能,持續顯示 journal 日志的內容(實時監測時相當有幫助!) --since --until:設置開始與結束的時間,讓在該期間的數據輸出而已 _SYSTEMD_UNIT=unit.service :只輸出 unit.service 的信息而已 _COMM=bash :只輸出與 bash 有關的信息 _PID=pid :只輸出 PID 號碼的信息 _UID=uid :只輸出 UID 為 uid 的信息 SYSLOG_FACILITY=[0-23] :使用 syslog.h 規范的服務相對序號來調用出正確的數據! 范例一:秀出目前系統中所有的 journal 日志數據 [root@study ~]# journalctl -- Logs begin at Mon 2015-08-17 18:37:52 CST, end at Wed 2015-08-19 00:01:01 CST. -- Aug 17 18:37:52 study.centos.vbird systemd-journal[105]: Runtime journal is using 8.0M (max 142.4M, leaving 213.6M of free 1.3G, current limit 142.4M). Aug 17 18:37:52 study.centos.vbird systemd-journal[105]: Runtime journal is using 8.0M (max 142.4M, leaving 213.6M of free 1.3G, current limit 142.4M). Aug 17 18:37:52 study.centos.vbird kernel: Initializing cgroup subsys cpuset Aug 17 18:37:52 study.centos.vbird kernel: Initializing cgroup subsys cpu .....(中間省略)..... Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19268]: finished 0anacron Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19270]: starting 0yum-hourly.cron Aug 19 00:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[19274]: finished 0yum-hourly.cron # 從這次開機以來的所有數據都會顯示出來!通過 less 一頁頁翻動給管理員查閱!數據量相當大! 范例二:(1)僅顯示出 2015/08/18 整天以及(2)僅今天及(3)僅昨天的日志數據內容 [root@study ~]# journalctl --since "2015-08-18 00:00:00" --until "2015-08-19 00:00:00" [root@study ~]# journalctl --since today [root@study ~]# journalctl --since yesterday --until today 范例三:只找出 crond.service 的數據,同時只列出最新的 10 筆即可 [root@study ~]# journalctl _SYSTEMD_UNIT=crond.service -n 10 范例四:找出 su, login 執行的登錄文件,同時只列出最新的 10 筆即可 [root@study ~]# journalctl _COMM=su _COMM=login -n 10 范例五:找出訊息嚴重等級為錯誤 (error) 的訊息! [root@study ~]# journalctl -p err 范例六:找出跟登錄服務 (auth, authpriv) 有關的登錄文件訊息 [root@study ~]# journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10 # 更多關于 syslog_facility 的數據,請參考 18.2.1 小節的內容啰! ``` 基本上,有 journalctl 就真的可以搞定你的訊息數據啰!全部的數據都在這里面耶~再來假設一下,你想要了解到登錄文件的實時變化, 那又該如何處置呢?現在,請開兩個終端機,讓我們來處理處理! ``` # 第一號終端機,請使用下面的方式持續偵測系統! [root@study ~]# journalctl -f # 這時系統會好像卡住~其實不是卡住啦!是類似 tail -f 在持續的顯示登錄文件信息的! # 第二號終端機,使用下面的方式隨便發一封 email 給系統上的帳號! [root@study ~]# echo "testing" &#124; mail -s 'tset' dmtsai # 這時,你會發現到第一號終端機竟然一直輸出一些訊息吧!沒錯!這就對了! ``` 如果你有一些必須要偵測的行為,可以使用這種方式來實時了解到系統出現的訊息~而取消 journalctl -f 的方法,就是 [crtl]+c 啊! ### 18.4.2 logger 指令的應用 上面談到的是叫出登錄文件給我們查閱,那換個角度想,“如果你想要讓你的數據儲存到登錄文件當中”呢?那該如何是好? 這時就得要使用 logger 這個好用的家伙了!這個家伙可以傳輸很多信息,不過,我們只使用最簡單的本機信息傳遞~ 更多的用法就請您自行 man logger 啰! ``` [root@study ~]# logger [-p 服務名稱.等級] "訊息" 選項與參數: 服務名稱.等級 :這個項目請參考 rsyslogd 的本章后續小節的介紹; 范例一:指定一下,讓 dmtsai 使用 logger 來傳送數據到登錄文件內 [root@study ~]# logger -p user.info "I will check logger command" [root@study ~]# journalctl SYSLOG_FACILITY=1 -n 3 -- Logs begin at Mon 2015-08-17 18:37:52 CST, end at Wed 2015-08-19 18:03:17 CST. -- Aug 19 18:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[29710]: starting 0yum-hourly.cron Aug 19 18:01:01 study.centos.vbird run-parts(/etc/cron.hourly)[29714]: finished 0yum-hourly.cron Aug 19 18:03:17 study.centos.vbird dmtsai[29753]: I will check logger command ``` 現在,讓我們來瞧一瞧,如果我們之前寫的 backup.service 服務中,如果使用手動的方式來備份,亦即是使用 "/backups/backup.sh log" 來執行備份時, 那么就通過 logger 來記錄備份的開始與結束的時間!該如何是好呢?這樣作看看! ``` [root@study ~]# vim /backups/backup.sh #!/bin/bash if [ "${1}" == "log" ]; then logger -p syslog.info "backup.sh is starting" fi source="/etc /home /root /var/lib /var/spool/{cron,at,mail}" target="/backups/backup-system-$(date +%Y-%m-%d).tar.gz" [ ! -d /backups ] && mkdir /backups tar -zcvf ${target} ${source} &&gt; /backups/backup.log if [ "${1}" == "log" ]; then logger -p syslog.info "backup.sh is finished" fi [root@study ~]# /backups/backup.sh log [root@study ~]# journalctl SYSLOG_FACILITY=5 -n 3 Aug 19 18:09:37 study.centos.vbird dmtsai[29850]: backup.sh is starting Aug 19 18:09:54 study.centos.vbird dmtsai[29855]: backup.sh is finished ``` 通過這個玩意兒,我們也能夠將數據自行處置到登錄文件當中啰! ### 18.4.3 保存 journal 的方式 再強調一次,這個 systemd-journald.servicd 的訊息是不會放到下一次開機后的,所以,重新開機后,那之前的記錄通通會遺失。 雖然我們大概都有啟動 rsyslogd 這個服務來進行后續的登錄文件放置,不過如果你比較喜歡 journalctl 的存取方式,那么可以將這些數據儲存下來喔! 基本上,systemd-journald.service 的配置文件主要參考 /etc/systemd/journald.conf 的內容,詳細的參數你可以參考 man 5 journald.conf 的數據。 因為默認的情況下面,配置文件的內容應該已經符合我們的需求,所以這邊鳥哥就不再修改配置文件了。只是如果想要保存你的 journalctl 所讀取的登錄文件, 那么就得要創建一個 /var/log/journal 的目錄,并且處理一下該目錄的權限,那么未來重新啟動 systemd-journald.service 之后, 日志登錄文件就會主動的復制一份到 /var/log/journal 目錄下啰! ``` # 1\. 先處理所需要的目錄與相關權限設置 [root@study ~]# mkdir /var/log/journal [root@study ~]# chown root:systemd-journal /var/log/journal [root@study ~]# chmod 2775 /var/log/journal # 2\. 重新啟動 systemd-journald 并且觀察備份的日志數據! [root@study ~]# systemctl restart systemd-journald.service [root@study ~]# ll /var/log/journal/ drwxr-sr-x. 2 root systemd-journal 27 Aug 20 02:37 309eb890d09f440681f596543d95ec7a ``` 你得要注意的是,因為現在整個日志登錄文件的容量會持續長大,因此你最好還是觀察一下你系統能用的總容量喔!避免不小心文件系統的容量被灌爆! 此外,未來在 /run/log 下面就沒有相關的日志可以觀察了!因為移動到 /var/log/journal 下面來啰! 其實鳥哥是這樣想的,既然我們還有 rsyslog.service 以及 logrotate 的存在,因此這個 systemd-journald.service 產生的登錄文件, 個人建議最好還是放置到 /run/log 的內存當中,以加快存取的速度!而既然 rsyslog.service 可以存放我們的登錄文件, 似乎也沒有必要再保存一份 journal 登錄文件到系統當中就是了。單純的建議!如何處理,依照您的需求即可喔!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看