1栋盹、?systemd查看日志文件有隱藏該如何處理夺谁?
systemd統(tǒng)一管理所有Unit的啟動(dòng)日志托猩,包含內(nèi)核日志和應(yīng)用日志碧磅。在默認(rèn)情況下碘箍,systemd日志保存于/run/log/journal中,系統(tǒng)重啟后會(huì)清除鲸郊,這里面的日志文件是二進(jìn)制形式保存的丰榴,不能直接用less等文本文件查看的方式查看內(nèi)容。
可以使用下面這個(gè)命令來查看日志內(nèi)容秆撮,由于一行可以顯示很多內(nèi)容四濒,屏幕的列數(shù)可能無法顯示完整,可以使用右方向鍵查看右邊的內(nèi)容职辨。
$ journalctl
日志文件還有更詳細(xì)的信息峻黍,使用下面這個(gè)參數(shù) 顯示隱藏字段
journalctl? -o verbose
-o?或 --output=STRING?來改變journal命令輸出的模式,可選的模式有 (short, short-iso,?short-precise, short-monotonic, verbose,export, json, json-pretty, json-sse, cat)
2拨匆、?自己動(dòng)手寫一個(gè)systemd的配置文件,?讓nginx服務(wù)可以開機(jī)啟動(dòng):
# 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)的通用選項(xiàng),這里定義了Description表示描述信息亏栈,將會(huì)顯示在systemctl status nginx.service命令的輸出內(nèi)容中台腥。After定義了要在這行所列出的服務(wù)啟動(dòng)后才能啟動(dòng)Nginx服務(wù)。
[Service]段主要定義了與Service類型相關(guān)的專用選項(xiàng)绒北。這里定義了以下選項(xiàng):
Type=forking黎侈,它表示后面定義的ExecStart的主進(jìn)程生成的其中一個(gè)子進(jìn)程將被提升成為主進(jìn)程,啟動(dòng)完成后闷游,舊的主進(jìn)程會(huì)退出峻汉。
PIDFile=...,它表示pid文件的所在位置
ExecStart選項(xiàng)定義Nginx的啟動(dòng)命令脐往,注意使用全路徑來寫
ExecReload選項(xiàng)定義Nginx的重新加載配置文件等
ExecStop選項(xiàng)定義Nginx的服務(wù)停止命令
[Install]段主要定義了服務(wù)啟動(dòng)或禁用時(shí)的一些選項(xiàng)休吠,這里定義了WantedBy表示被后面所列服務(wù)所依賴。
注意业簿,編寫了Nginx的unit文件之后瘤礁。需要通知systemd重載此配置文件,命令如下:
# systemctl daemon-reload
3梅尤、?SIGHUP柜思、SIGQUIT岩调、SIGTERM、SIGINTERRUPT的區(qū)別
通過命令man 7 signal來查看每個(gè)信號(hào)的含義赡盘。
SIGHUP?控制終端關(guān)閉或控制進(jìn)程退出時(shí)号枕,終端會(huì)話內(nèi)的子進(jìn)程與控制進(jìn)程的子進(jìn)程都會(huì)收到這樣的信號(hào),系統(tǒng)對SIGHUP信號(hào)的默認(rèn)處理是終止收到該信號(hào)的進(jìn)程亡脑。所以若程序中沒有捕捉該信號(hào)堕澄,當(dāng)收到該信號(hào)時(shí),進(jìn)程就會(huì)退出霉咨。
SIGQUIT??和SIGINT類似, 但由QUIT字符(通常是Ctrl-\? )來控制. 進(jìn)程在因收到SIGQUIT退出時(shí)會(huì)產(chǎn)生core文件, 類似于一個(gè)程序錯(cuò)誤信號(hào)蛙紫。
SIGTERM程序結(jié)束(terminate)信號(hào), 與SIGKILL不同的是該信號(hào)可以被阻塞和處理。通常用來要求程序自己正常退出途戒,shell命令kill缺省產(chǎn)生這個(gè)信號(hào)坑傅。如果進(jìn)程終止不了,我們才會(huì)嘗試SIGKILL喷斋,就是我們有時(shí)使用kill -9 pid來強(qiáng)行殺死進(jìn)程唁毒。
SIGINTERRUPT? ?程序終止(interrupt)信號(hào), 在用戶鍵入INTR字符(通常是Ctrl-C)時(shí)發(fā)出,用于通知前臺(tái)進(jìn)程組終止進(jìn)程星爪。
4浆西、?用awk查看tcp連接處于TIMEOUT的連接個(gè)數(shù)
netstat -an |awk '/^tcp\>/ {if($NF=="TIMEOUT")sum++} END{print sum}'
說明如下:netstat -an?可以顯示當(dāng)前所有的網(wǎng)絡(luò)連接。awk?是按行處理的文本處理程序
/^tcp\>/表示以tcp單詞開頭的行顽腾,這些行都是tcp連接近零,因?yàn)橛行┬惺莟cp6所以加上\>來錨定詞尾。
$NF=="TIMEOUT"?這個(gè)條件中$NF表示每一行的最后一列抄肖,因?yàn)镹F是一行最大的列數(shù)久信,如果一行有3列值,則NF為3漓摩,$NF就表示最后一列裙士。因網(wǎng)絡(luò)連接的狀態(tài)值在netstat -an?輸出內(nèi)容里面為最后一列。所以要用$NF來取出網(wǎng)絡(luò)連接狀態(tài)管毙,然后用==與"TIMEOUT"進(jìn)行比較腿椎。如果相等就執(zhí)行后面的sum++表示sum自增值,我們要統(tǒng)計(jì)這一狀態(tài)的連接數(shù)就要這樣做锅风。注意這里要用==而不是一個(gè)=號(hào)酥诽,要不然會(huì)變成賦值而不是比較。
END{print sum}?表示處理完所有的行皱埠,然后執(zhí)行打印sum的值肮帐。