公司網站維護好做嗎百度移動端排名軟件
RHCE8 資料整理
- 第五篇 系統(tǒng)管理
- 第18章 進程管理
- 18.1 進程介紹
- 18.2 查看進程
- 18.3 向進程發(fā)送信號
- 18.4 進程優(yōu)先級
- 第19章 日志
- 19.1 rsyslog的配置
- 19.2 查看日志
- 第20章 網絡時間服務器
- 20.1 時間同步必要性
- 20.2 配置時間服務器
- 20.3 配置客戶端
- 第21章 計劃任務
- 21.1 at
- 21.2 crontab
- 21.3 anacron
第五篇 系統(tǒng)管理
第18章 進程管理
18.1 進程介紹
參考 https://blog.csdn.net/u010230019/article/details/132311926
18.2 查看進程
通過ps
能夠查看進程信息,不加選項的ps
顯示當前終端的進程
[root@server ~]# psPID TTY TIME CMD42301 pts/0 00:00:00 bash42351 pts/0 00:00:00 ps
關于ps
詳細內容查看 https://blog.csdn.net/u010230019/article/details/132301168
通過pgrep [-f] xxx
能夠查看某個進程的PID
[root@server ~]# pgrep sshd
899
42289
42291
42293
42312
也可以通過pidof xxx
查看PID
[root@server ~]# pidof sshd
42312 42293 42291 42289 899
pgrep
會把進程CMD
中含有sshd
的進程的PID
全部找出來,而pidof
找的是CMD
為sshd
的
ps查看的是執(zhí)行命令的一瞬間的情況,而想要動態(tài)查看進程信息的,可以使用top
命令,默認3秒刷新一次,可以通過-d
來指定刷新時間
詳細參考https://blog.csdn.net/u010230019/article/details/132301168
top - 16:47:00 up 14 days, 22:56, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 299 total, 1 running, 298 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1748.7 total, 178.4 free, 897.0 used, 673.3 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 656.1 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND772 root 20 0 456396 11304 7496 S 0.2 0.6 24:42.64 vmtoolsd1344 gdm 20 0 3449740 177048 101844 S 0.2 9.9 8:28.06 gnome-shell42252 root 20 0 0 0 0 I 0.2 0.0 0:00.03 kworker/u256:0-events_unbound42373 root 20 0 0 0 0 I 0.2 0.0 0:00.24 kworker/1:0-mpt_poll_042395 root 20 0 226152 4488 3508 R 0.2 0.3 0:00.03 top1 root 20 0 170640 14660 9460 S 0.0 0.8 0:15.04 systemd2 root 20 0 0 0 0 S 0.0 0.0 0:01.84 kthreadd
18.3 向進程發(fā)送信號
通過kill -l
查看所有信號
[root@server ~]# kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
常用信號有:
- 15:以正常的結束進程來終止該進程。由于是正常的終止, 所以后續(xù)的動作會將他完成。不過,如果該進程已經發(fā)生問題,就是無法使用正常的方法終止時, 輸入這個 signal 也是沒有用的。
- 9:代表強制中斷一個進程的進行,如果該進程進行到一半, 那么尚未完成的部分可能會有『半產品』產生,類似 vim 會有 .filename.swp 保留下來。
- 2:相當于用鍵盤輸入 [ctrl]-c 來中斷一個進程的進行
- 1:啟動被終止的進程,可讓該 PID 重新讀取自己的配置文件,類似重新啟動
通過kill -n PID
可以向進程發(fā)送信號,通過killall -n processname
可以向所有processname發(fā)送信號
18.4 進程優(yōu)先級
系統(tǒng)中所有的進程都要消耗CPU資源,CPU會為每個進程分配一個時間片,輪到某個進程時CPU會處理這個進程的請求,時間片到期,則會把進程暫停放回隊列等待下一輪時間片。在同一顆CPU上如果運行太多的程序就會導致CPU資源不足,可以調整進程的優(yōu)先級,讓指定進程獲取更多的資源,更優(yōu)先的去執(zhí)行。
進程的優(yōu)先級由兩個值決定:優(yōu)先順序(priority)和優(yōu)先級(niceness)。其中優(yōu)先順序由內核對它進行動態(tài)更改,我們不需要做太多干預。對用戶而言,只需要修改nice值,nice值范圍為-20~19
,nice值越小,進程就越先執(zhí)行。
多個進程如果運行在不同的CPU上是互不干擾的,不會發(fā)生資源搶占情況。只有運行在同一顆CPU上才會發(fā)生資源搶占情況。
查看CPU情況,命令:
[root@server ~]# lscpu
Architecture: x86_64CPU op-mode(s): 32-bit, 64-bitAddress sizes: 43 bits physical, 48 bits virtualByte Order: Little Endian
CPU(s): 2On-line CPU(s) list: 0,1
...
調整優(yōu)先級示例
可以看到有兩顆CPU(一顆CPU有兩個核,則被認為是兩顆CPU),編號分別是0和1?,F在關閉1號CPU,命令如下:
[root@server ~]# cat /sys/devices/system/cpu/cpu1/online
1
[root@server ~]# echo 0 > /sys/devices/system/cpu/cpu1/online
[root@server ~]# cat /sys/devices/system/cpu/cpu1/online
0
[root@server ~]# lscpu
Architecture: x86_64CPU op-mode(s): 32-bit, 64-bitAddress sizes: 43 bits physical, 48 bits virtualByte Order: Little Endian
CPU(s): 2On-line CPU(s) list: 0Off-line CPU(s) list: 1
可以看到1號CPU已經離線,/sys/devices/system/cpu/cpu1/online
中的值如果是0則表示CPU離線,1則表示在線
[root@server ~]# cat /dev/zero > /dev/null &
[1] 42453
[root@server ~]# cat /dev/zero > /dev/null &
[2] 42454
[root@server ~]# top -d 5PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND42453 root 20 0 221096 1048 964 R 49.6 0.1 0:16.22 cat42454 root 20 0 221096 1024 940 R 49.4 0.1 0:14.75 cat
可以看到兩個cat
進程消耗的CPU是差不多的,因為他們的nice值相同,可以平等的消耗CPU資源,下面使用renice
修改進程的nice值,改為-10
,如下:
[root@server ~]# renice -n -10 42453
42453 (process ID) old priority 0, new priority -10
[root@server ~]# top -d 5PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND42453 root 10 -10 221096 1048 964 R 89.5 0.1 1:39.67 cat42454 root 20 0 221096 1024 940 R 9.7 0.1 1:29.11 cat
[root@server ~]# killall -9 cat
可以看到42453比42454占用了更多的CPU資源,nice值越小可以獲得更多的CPU資源
前面是對運行中的進程調整優(yōu)先級,也可以直接以某個特定的nice值啟動進程
nice -n 10 cat /dev/zero > /dev/null &
開啟1號CPU
第19章 日志
詳細參考
https://blog.csdn.net/u010230019/article/details/127772295
https://blog.csdn.net/u010230019/article/details/132359825
在REHL8/CentOS8中,日志由rsyslogd服務管理的,不同類別的日志由/etc/rsyslog.conf
決定保存在具體的文件中
/etc/rsyslog.conf
定義規(guī)則格式:
日志類別.日志基本標準線 文件
日志類別:
相對序號 | 服務類別 | 說明 |
---|---|---|
0 | kern(kernel) | 就是核心(kernel)產生的訊息,大部分都是硬件偵測以及核心功能的啟用 |
1 | user | 在用戶層級所產生的信息,例如后續(xù)會介紹到的用戶使用 |
2 | 只要與郵件收發(fā)有關的訊息記錄都屬于這個; | |
3 | daemon | 主要是系統(tǒng)的服務所產生的信息,例如systemd就是這個有關的訊息! |
4 | auth | 主要與認證/授權有關的機制,例如login,ssh,su等需要賬號/密碼的咚咚; |
5 | syslog | 就是由syslog相關協(xié)議產生的信息,其實就是rsyslogd這支程序本身產生的信息啊! |
6 | lpr | 亦即是打印相關的訊息啊! |
7 | news | 與新聞組服務器有關的東西; |
8 | uucp | 全名為Unix to Unix Copy Protocol,早期用于unix系統(tǒng)間的程序數據交換; |
9 | cron | 就是例行性工作排程cron/at等產生訊息記錄的地方; |
10 | authpriv | 與auth類似,但記錄較多賬號私人的信息,包括pam模塊的運作等! |
11 | ftp | 與FTP通訊協(xié)議有關的訊息輸出! |
16~23 | local0~local7 | 保留給本機用戶使用的一些登錄文件訊息,較常與終端機互動。 |
日志級別:
等級數值 | 等級名稱 | 說明 |
---|---|---|
none | 不需登錄等級,忽略掉某些服務的信息 | |
7 | debug | 用來 debug (除錯) 時產生的訊息數據; |
6 | info | 僅是一些基本的訊息說明而已; |
5 | notice | 雖然是正常信息,但比 info 還需要被注意到的一些信息內容; |
4 | warning (warn) | 警示的訊息,可能有問題,但是還不至于影響到某個 daemon 運作的信息;基本上,info, notice, warn 這三個訊息都是在告知一些基本信息而已,應該還不至于造成一些系統(tǒng)運作困擾; |
3 | err (error) | 一些重大的錯誤訊息,例如配置文件的某些設定值造成該服務服法啟動的信息說明, 通常藉由 err 的錯誤告知,應該可以了解到該服務無法啟動的問題呢! |
2 | crit | 比 error 還要嚴重的錯誤信息,這個 crit 是臨界點 (critical) 的縮寫,這個錯誤已經很嚴重了喔! |
1 | alert | 警告警告,已經很有問題的等級,比 crit 還要嚴重! |
0 | emerg (panic) | 疼痛等級,意指系統(tǒng)已經幾乎要當機的狀態(tài)! 很嚴重的錯誤信息了。通常大概只有硬件出問題,導致整個核心無法順利運作,就會出現這樣的等級的訊息吧! |
19.1 rsyslog的配置
*.info;mail.none;authpriv.none;cron.none /var/log/messages# The authpriv file has restricted access.
authpriv.* /var/log/secure# Log all the mail messages in one place.
mail.* -/var/log/maillog# Log cron stuff
cron.* /var/log/cron# Everybody gets emergency messages
*.emerg :omusrmsg:*# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler# Save boot messages also to boot.log
local7.* /var/log/boot.log
*.info;mail.none;authpriv.none;cron.none /var/log/messages
除了mail,authpriv和cron的所有info及以上的訊息都記錄在/var/log/messages
中
模擬產生一個mail日志,級別為debug
[root@server ~]# logger -p mail.debug "1111"
[root@server ~]# tail -1 /var/log/maillog
Nov 9 17:42:38 server root[42476]: 1111
19.2 查看日志
不同的日志記錄在不同的日志文件中,參考 https://blog.csdn.net/u010230019/article/details/127772295 查看不同的日志信息
- 查看系統(tǒng)的引導日志,可以查看
/var/log.boot.log
- 查看通過
ssh,ftp
等登錄系統(tǒng)或嘗試登錄系統(tǒng)的用戶,可以查看/var/log/secure
- 郵件相關日志,可以查看
/var/log/maillog
- 查看安裝或卸載了哪些包,可以查看
/var/log/dnf.log
(REHL)
還可以通過journalctl
查看系統(tǒng)的所有日志,格式
journalctl [OPTIONS...] [MATCHES...]
-f : 持續(xù)輸出
-p 級別:查看指定級別日志
[root@server ~]# journalctl -p crit
Oct 25 17:50:22 server.rhce.cc kernel: Warning: Unmaintained hardware is detected: e1000:100F:8086 @ 0000:02:00.0
Oct 25 17:50:23 server.rhce.cc kernel: Warning: Unmaintained hardware is detected: e1000:100F:8086 @ 0000:02:03.0
第20章 網絡時間服務器
20.1 時間同步必要性
大部分集群服務器都要求時間必須保持一致,否則會提示警告信息。
20.2 配置時間服務器
這里主要使用chrony
進行配置時間服務器
主機 | ip | 類型 |
---|---|---|
node-140 | 192.168.17.140 | 時間服務器 |
node-138 | 192.168.17.138 | 客戶端 |
- 啟動服務
systemctl start chronyd
systemctl status chronyd
systemctl enable chronyd
- 指定時間服務器使用的上層時間服務器,編輯
/etc/chrony.conf
[root@server ~]# grep pool /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
pool 127.127.1.0 iburst
pool
后面指定上層時間服務器,由于我們這里把node-140
作為時間服務器,修改pool 2.rhel.pool.ntp.org iburst
為pool 127.127.1.0 iburst
,即上層時間服務器設置為本地時鐘的IP:127.127.1.0
- 允許指定的客戶端訪問
[root@server ~]# grep allow /etc/chrony.conf
allow 192.168.17.0/24
如果允許所有客戶段都能訪問,則可以設置allow 0/0
或allow all
- 修改local statum
[root@server ~]# grep local /etc/chrony.conf
# Allow NTP client access from local network.
local stratum 10
表示即使服務器本身沒有和時間服務器保持時間同步,也可以對外提供時間服務
- 重啟
chronyd
服務
systemctl restart chronyd
chrony
使用的是UDP的123和323端口,所以查看端口
[root@server ~]# ss -nltpu|grep chronyd
udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:* users:(("chronyd",pid=42637,fd=7))
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=42637,fd=5))
udp UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=42637,fd=6))
- 如果開啟了防火墻,則需要把這兩個端口開放,如下
[root@server ~]# firewall-cmd --add-port=123/udp --permanent
success
[root@server ~]# firewall-cmd --add-port=323/udp --permanent
success
[root@server ~]# firewall-cmd --reload
success
20.3 配置客戶端
- 把
node-138
設置為時間服務器客戶端,編輯/etc/chrony.conf
,修改如下:
[root@node-138 ~]# egrep -v '^$|^#' /etc/chrony.conf
server 192.168.17.140 iburst
driftfile /var/lib/chrony/drift
makestep 200 3
rtcsync
logdir /var/log/chrony
- 同步時間
[root@node-138 ~]# date;ssh node-140 date
Thu Nov 9 11:16:23 CST 2023
Thu Nov 9 06:19:33 PM CST 2023
[root@node-138 ~]# systemctl restart chronyd
[root@node-138 ~]# date;ssh node-140 date
Thu Nov 9 11:16:42 CST 2023
Thu Nov 9 06:19:52 PM CST 2023
[root@node-138 ~]# date;ssh node-140 date
Thu Nov 9 18:19:54 CST 2023
Thu Nov 9 06:19:54 PM CST 2023
可以看到時間并不是一下同步的,而是逐漸同步的,為什么呢?
這還需要從/etc/chrony.conf
的makestep
選項說起,makestp
那行,格式如下:
makestep 閾值 limit
客戶端向時間服務器同步時間有兩種方式:step
和slew
。
- step:跳躍著更新時間,如時間從1點直接跳到7點
- slew:平滑著移動時間,晶體芯片跳動的會快一些,好比秒針的轉速“快進”了一樣
如果客戶端和服務器時間相差較多,則通過step
的方式更新時間;如果相差不多,則通過slew
更新時間。那么時間相差多與不多的標準又是什么呢?
這就要看時間差是否超過makestep
后面的閾值了。以makestep 10 3
為例,如果相差10
秒以上,就認為時間相差較多,則前3
次通過step
方式更新時間(有些程序會因為時間跳動帶來問題)。如果是10
秒以內,則會通過slew
緩慢平滑更新時間。
可以通過chronyc -n sources -v
查看現在的同步狀況
[root@node-138 ~]# chronyc -n sources -v
210 Number of sources = 1.-- Source mode '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.17.140 10 6 377 64 +33us[ +70us] +/- 396us
可以看到node-138
是向node-140
進行時間同步的
第21章 計劃任務
詳細參考 https://blog.csdn.net/u010230019/article/details/132290764
21.1 at
使用at
執(zhí)行一次性計劃任務,格式
at 時間點 <【按Enter】>
> 輸入要執(zhí)行的命令
Ctrl + D 提交atq job #查詢
at -c job #詳細查詢具體內容,一般配合 tail -3 使用
atrm job #刪除
[root@node-138 ~]# at now+1minutes
at> echo 123
at> <EOT>
job 12 at Thu Nov 9 18:46:00 2023
[root@node-138 ~]# atq
9 Wed Feb 14 01:00:00 2024 a root
10 Wed Feb 14 01:00:00 2024 a root
12 Thu Nov 9 18:46:00 2023 a root
21.2 crontab
如果周期性執(zhí)行計劃任務,則需要使用crontab
crontab -e [-u xxx] #[為其他用戶]創(chuàng)建計劃任務
crontab -l [-u xxx] #[為其他用戶]查詢計劃任務
crontab -r #刪除
詳細查詢 https://blog.csdn.net/u010230019/article/details/132290764
[root@study ~]# cat /etc/crontab
SHELL=/bin/bash <==使用哪種 shell 接口
PATH=/sbin:/bin:/usr/sbin:/usr/bin <==執(zhí)行文件搜尋路徑
MAILTO=root <==若有額外 STDOUT,以 email 將數據送給誰
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
- /etc/cron.allow:
將可以使用 crontab 的賬號寫入其中,若不在這個文件內的使用者則不可使用 crontab; - /etc/cron.deny:
將不可以使用 crontab 的賬號寫入其中,若未記錄到這個文件當中的使用者,就可以使用 crontab
同時存在時,allow生效
可以直接將指令放到 /etc/cron.hourly/
讓系統(tǒng)每小時定時執(zhí)行之外,在 /etc/ 底下其實還有 /etc/cron.daily/
, /etc/cron.weekly/
, /etc/cron.monthly/
,那三個目錄是代表每日、每周、每月各執(zhí)行一次的意思
21.3 anacron
anacron 并不是用來取代 crontab 的,anacron 存在的目的就在于我們上頭提到的,在處理非 24 小時一直啟動的 Linux 系統(tǒng)的 crontab 的執(zhí)行! 以及因為某些原因導致的超過時間而沒有被執(zhí)行的排程工作。
其實 anacron 也是每個小時被 crond 執(zhí)行一次,然后 anacron 再去檢測相關的排程任務有沒有被執(zhí)行,如果有超過期限的工作在, 就執(zhí)行該排程任務,執(zhí)行完畢或無須執(zhí)行任何排程時,anacron 就停止了。
關于詳細內容查看上面連接