1趁舀、查看日志文件有隱藏該如何處理篡石?
CentOS 7日志系統(tǒng)由 systemd-journald 和 rsyslog 兩個服務(wù)組成
默認属提,systemd日志保存于/run/log/journal中寂汇,系統(tǒng)重啟后會清除瓢阴,rsyslog會根據(jù)一定的規(guī)則,將日志寫到到/var/log目錄中永久保存
systemd統(tǒng)一管理所有Unit的啟動日志健无,包含內(nèi)核日志和應(yīng)用日志荣恐。journald的配置文件為/etc/systemd/journald.conf目錄
基礎(chǔ)命令
#基礎(chǔ)日志查看(從最開始顯示,按頁)
journalctl
journalctl --utc
##日志過濾
#按單元
journalctl -u nginx.service
journalctl -u nginx.service --since today
journalctl -u nginx.service -u php-fpm.service --since today
#按路徑位置
journalctl /usr/bin/bash
#內(nèi)核日志
journalctl -k
#按日志級別
journalctl -p notice
##可用的日志級別:7-debug/6-info/5-notice/4-warning/3-err/2-crit/1-alert/0-emerg
##
右箭頭可以查看更多信息
journalctl --no-pager | more #帶換行的分頁
#指定某次啟動
journalctl -b本次啟動
journalctl -b -0本次啟動
journalctl -b -1上次啟動
#指定顯示格式為json
journalctl -u nginx -o json-pretty
#顯示隱藏字段
journalctl -u nginx -o verbose
#全數(shù)字的時間
journalctl -u nginx -o short-iso
#顯示指定行數(shù) 最新
journalctl -n 10
#追蹤日志 動態(tài)顯示
journalctl -f
#日志的磁盤占用量
journalctl --disk-usage
#限定日志文件總大小
journalctl --vacuum-size=1G
systemd日志保存于/run/log/journal中,系統(tǒng)重啟后會清除叠穆,這里面的日志文件是二進制形式保存的少漆,不能直接用less等文本文件查看的方式查看內(nèi)容∨鸨唬可以使用下面這個命令來查看日志內(nèi)容示损,由于一行可以顯示很多內(nèi)容,屏幕的列數(shù)可能無法顯示完整嚷硫,可以使用右方向鍵查看右邊的內(nèi)容检访。
2、自己動手寫一個systemd的配置文件仔掸, 讓nginx服務(wù)可以開機啟動:
#cd?/etc/systemd/system?
#vi nginx.service
[Unit]Description=nginx?web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
[Install]WantedBy=multi-user.target
說明:此文件分成三段:[Unit]脆贵、[Service]和[Install],
其中[Unit]段主要定義與類型無關(guān)的通用選項起暮,這里定義了Description表示描述信息卖氨,將會顯示在systemctl status nginx.service命令的輸出內(nèi)容中。
After定義了要在這行所列出的服務(wù)啟動后才能啟動Nginx服務(wù)负懦。
[Service]段主要定義了與Service類型相關(guān)的專用選項筒捺。
這里定義了以下選項:Type=forking,它表示后面定義的ExecStart的主進程生成的其中一個子進程將被提升成為主進程纸厉,啟動完成后系吭,舊的主進程會退出。?
PIDFile=...颗品,它表示pid文件的所在位置? ??
ExecStart選項定義Nginx的啟動命令村斟,注意使用全路徑來寫? ?
ExecReload選項定義Nginx的重新加載配置文件等? ??
ExecStop選項定義Nginx的服務(wù)停止命令
[Install]段主要定義了服務(wù)啟動或禁用時的一些選項,這里定義了WantedBy表示被后面所列服務(wù)所依賴抛猫。
注意蟆盹,編寫了Nginx的unit文件之后。需要通知systemd重載此配置文件闺金,命令如下:# systemctl daemon-reload
3逾滥、SIGHUP、SIGQUIT败匹、SIGTERM寨昙、SIGINTERRUPT的區(qū)別
通過命令man 7 signal來查看每個信號的含義。
SIGHUP控制終端關(guān)閉或控制進程退出時掀亩,終端會話內(nèi)的子進程與控制進程的子進程都會收到這樣的信號舔哪,系統(tǒng)對SIGHUP信號的默認處理是終止收到該信號的進程。所以若程序中沒有捕捉該信號槽棍,當收到該信號時捉蚤,進程就會退出抬驴。
SIGQUIT和SIGINT類似, 但由QUIT字符(通常是Ctrl-\? )來控制. 進程在因收到SIGQUIT退出時會產(chǎn)生core文件, 類似于一個程序錯誤信號。
SIGTERM程序結(jié)束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理缆巧。通常用來要求程序自己正常退出布持,shell命令kill缺省產(chǎn)生這個信號。如果進程終止不了陕悬,我們才會嘗試SIGKILL题暖,就是我們有時使用kill -9 pid來強行殺死進程。
SIGINTERRUPT程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時發(fā)出捉超,用于通知前臺進程組終止進程胧卤。
4、用awk查看tcp連接處于TIMEOUT的連接個數(shù)
netstat -an |awk '/^tcp\>/ {if($NF=="TIMEOUT")sum++} END{print sum}'
說明如下:netstat -an可以顯示當前所有的網(wǎng)絡(luò)連接拼岳。
awk是按行處理的文本處理程序?/^tcp\>/表示以tcp單詞開頭的行枝誊,這些行都是tcp連接,因為有些行是tcp6所以加上\>來錨定詞尾裂问。
$NF=="TIMEOUT"這個條件中$NF表示每一行的最后一列,因為NF是一行最大的列數(shù)牛柒,如果一行有3列值堪簿,則NF為3,$NF就表示最后一列皮壁。
因網(wǎng)絡(luò)連接的狀態(tài)值在netstat -an輸出內(nèi)容里面為最后一列椭更。所以要用$NF來取出網(wǎng)絡(luò)連接狀態(tài),然后用==與"TIMEOUT"進行比較蛾魄。如果相等就執(zhí)行后面的sum++表示sum自增值虑瀑,我們要統(tǒng)計這一狀態(tài)的連接數(shù)就要這樣做。注意這里要用==而不是一個=號滴须,要不然會變成賦值而不是比較舌狗。
END{print sum}表示處理完所有的行,然后執(zhí)行打印sum的值扔水。