(第九周作業(yè))
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)對(duì)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的值。