天天看點

程序和計劃任務管理

程序和計劃任務管理

ps 程序管理工具

包含帶-的不帶-的選項

ps 檢視目前終端程序

ps a 檢視所有終端的程序

ps ax 檢視所有和終端無關的程序

ps axu 顯示程序的所有者

ps uxaf 檢視程序的父子關系

ps xo cmd,%CPU k %cpu 排序檢視cmd和CPU相應的列 按CPU排序

ps k %cpu 按CPU排序

ps L 檢視所有的屬性

renice -n -10 2612 更改程序2612的優先級為-10

[root@contes6 ~]# ps axu

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

使用者 占用CPU百分比 占用記憶體百分比 承諾記憶體大小 終端編号 狀态 開啟時間 占用cup時間片 程序程式名

top 指令可以動态的跟蹤記憶體CPU情況

top - 10:51:32 up 25 min, 2 users, load average: 0.00, 0.00, 0.00 :這一行是uptime指令的結果顯示

Tasks: 142 total, 1 running, 141 sleeping, 0 stopped, 0 zombie

tasks 程序

Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st

0.0%us, :使用者空間使用

0.2%sy :系統空間占用

0.0%ni :調整優先級

99.7%id :空閑的cpu

0.0%wa :等待的CPU

0.0%hi :硬中斷,例如我鍵盤敲了一下,硬體就會給CPU發信号,我這邊發生了什麼事

0.2%si :軟中斷,應用程式發生了事,CPU去響應

0.0%st :被盜取得時間

Mem: 1004112k total, 352980k used, 651132k free, 22272k buffers

Swap: 2097148k total, 0k used, 2097148k free, 125148k cached

預設是cpu排序

大寫M是記憶體排序

大寫P是CPU排序

小寫l是隐藏uptime指令結果,在敲l顯示uptime指令結果

小寫t是隐藏和顯示程序的情況

數字1是顯示cpu

小寫m控制記憶體的顯示情況

q退出目前界面

s修改重新整理的間隔時間

top -d 5 指定重新整理間隔為5秒

k指定殺死程序,輸入程序編号

大寫W是儲存到檔案,預設儲存到家目錄是隐藏檔案 .toprc

top -b 檢視所有程序

top -n 重新整理3次自動退出

top -n 3 -b -d 2 :顯示全部程序,重新整理的間隔時間為2秒,總共重新整理3次

htop 帶顔色的程序管理工具

yum install htop

free檢視記憶體使用情況

echo 1 > /proc/sys/vm/drop_caches 清除記憶體裡面的緩存

VMstat :專門檢視管理虛拟記憶體資訊

vmstat 1 :1秒執行一次

vmstat 2 3 :2秒重新整理一次,重新整理3次就退出

iostat :顯示記憶體和cup的資訊

iiostat 1 1秒執行一次

pmap :程序和記憶體的對應關系

pmap 1 :pmap後加程序編号

pmap -x 1 :顯示詳細資訊

cat /proc/1/maps 檢視1程序編号的記憶體具體使用情況

glancens 遠端監控工具

yum install glances

開啟glances ,在被監控端,以伺服器的方式開啟,開啟以後會監控一個端口,然後在另一台機器以glances用戶端連接配接被監控的主機

glances -s -B 192.168.249.141

-s 伺服器

-B 監控的ip端口

ss -nlt 檢查ip端口服務是不是被啟動

glances -c 192.168.249.141 在用戶端開啟glances 連接配接被監控的伺服器

dstat工具,系統資源統計,代替vmstat,iostat

yum install dstat

dstat --top-cpu 檢視CPU占用最高的程序

dstat --top-io 内個磁盤消耗的讀寫最多

iotop用來觀察和磁盤I/O相關的工具

yum install iotop

pidof ping 檢視ping指令的程序編号

kill 向程序發送控制信号

1 信号 讓某個程序挂起,同時重新讀取配置檔案

2 信号 終止正在執行的程式

3 信号 相當于ctrl+\

15信号 正常退出

18 信号繼續執行

19 信号程序休眠

9 信号 強制殺死程序

killall 後面跟程序的名稱 :同時殺死相同名字的程序

例:killall httpd

pkill -t pts/0 殺死pts/0的所有程序,預設的信号是15

pkill 和pgrep共用一個man幫助

pkill 支援擴充正規表達式

前背景切換

程序有兩種前台和背景程序

前台執行占用終端資源,前台程序如果不結束,終端資源就沒有辦法被其他指令執行

背景執行:在指令的後面加一個& ,就變成背景執行,不耗費終端資源

輸出結果還是在終端是顯示,但是可以執行其他指令

例:ping 172.20.0.1 &

jobs 可以檢視正在執行的背景程序

[1]+ Running ping 172.20.0.1 &

将背景程序變成前台程序

fg 1 :1是jobs檢視的背景程序的編号,

在執行背景程式的時候不能用crtl+c 結束,要把它變成前台程序或者來來來殺死程序

将前台程序變成背景程序

例:ping 172.20.0.1 前台程序

Ctrl+z 把正在執行的前台程序變成背景程序,但是是休眠狀态

[1]+ Stopped ping 172.20.0.1

stopped 背景休眠

把背景休眠變成背景執行

bg 1

killall -18 ping

把背景運作變成背景休眠

killall -19 ping

把背景程序殺死

1:jobs 檢視背景程序編号

2:kill %1 :%後面跟的是jobs檢視到的程序編号

背景的作業,雖然在背景執行但是和終端相關,終端關閉,背景作業就停止

如果真正執行背景備份忽然斷網怎麼辦?

可以開啟一個異常共享會話 screen

如果斷網可以用 screen -r 恢複

1:screen 建立一個單獨的會話

2:ping 172.20.0.1 & 在單獨的會話中執行背景指令

3:screen -r :如果忽然斷網,可以用 -r恢複繼續執行

nohup ping 172.20.0.1 &

将背景的螢幕輸出放到 nohup.out 檔案裡面

讓3個指令工具同時執行,并行執行

第一種方法:vim all.sh

#/bin/bahs

ping 127.1 &

ping 127.2 &

ping 127.3 &

第二種方法:(ping 127.1 &);(ping 127.2 &);(ping 127.3 &)

第三種方法:{ ping 127.1 & ping 127.2 & ping 127.3 & }

任務管理

分為一次性任務計劃和周期性任務計劃

在未來的某個時間執行 ,一次性計劃任務 at

rpm -ivh at-3.1.13-22.el7.x86_64.rpm 安裝at包

systemctl status atd 檢視是不是running狀态,如果不是手動開啟

centos7 開啟:systemctl start atd

systemctl enable atd

centos6 開啟:service atd start

at -V 顯示版本資訊

題外:永久同步時間

centos 7: vim /etc/chrony.conf

server 172.20.0.1 iburst 加入這一行

centos 6: vim /etc/ntp.conf

ntpdate 172.20.0.1 同步伺服器時間

centos7 開啟服務

systemctl enable chronyd 開機啟動

systemctl start chronyd 啟動服務

centos6 開啟服務

chkconfig ntpd on 開機啟動

service ntpd start 開啟服務

[root@centos6 ~]#at 18:00 設定将來的一個時間

at> rm /data/* -rf 要執行的任務

at> <EOT> Ctrl+d 結束

job 1 at 2018-05-05 18:00 顯示有一個任務計劃在幾點幾分執行

at -l 檢視任務計劃

1 2018-05-05 18:00 a root

at -c 1 :檢視第1個任務計劃的内容

任務計劃被放在檔案裡面,重新開機不會丢失

cat /var/spool/at/a000010183f558

[root@centos6 ~]#at now + 15minutes 在未來的15分鐘

at> wall class is over 發一個廣播

at> <EOT> ctrl+d結束

job 2 at 2018-05-05 15:56

檢視任務計劃

[root@centos6 ~]#at -l

2 2018-05-05 15:56 a root

at -d 1 :删除第一個任務計劃

-l 檢視任務清單

-c 檢視任務計劃内容

-d 删除任計劃

-f 讀取任務檔案

-m 強制發郵件

建立一個廣播檔案

[root@centos6 ~]#cat > f1.txt

wall hello ha ha ha

在未來的一分鐘執行檔案

[root@centos6 ~]#at -f f1.txt now + 1minutes

job 3 at 2018-05-05 15:50

如果計劃任務帶标準輸出,不會在目前終端顯示,但是它會以郵件的方式發給你

如果計劃任務裡面有标準輸出會造成大量的垃圾郵件,把标準輸出重定向到&> /dev/null

at -m 如果你不知道你的任務計劃執沒執行,就加一個-m強制發郵件

白名單和黑名單:可以規定哪個使用者可以執行計劃,哪個使用者不可以執行任務計劃

白名單 :/etc/at.allow 預設不存在,要建立,将使用者加入白名單

黑名單 :/etc/at.deny 預設存在 将使用者寫入檔案,使用者就不能執行任務計劃

如果有白名單,隻有白名單裡面的使用者能執行任務計劃,其他使用者不能執行

如果沒有有白名單,隻有黑名單那隻有黑名單裡面的使用者不能執行任務計劃,其他使用者都可以

用腳本建立計劃任務

#!/bin/bash

at 18:00 <<end

rm /data/* -rf

end

周期性計劃任務 cron

rpm -ivh /mnt/cdrom/Packages/cronie-1.4.11-17.el7.x86_64.rpm

centos7 :啟動服務 systemctl start crond

開機啟動 systemctl enable crond

centos6 :啟動服務 service crond start

開機啟動

rpm -ivh /misc/cd/Packages/cronie-anacron-1.4.4-16.el6_8.2.x86_64.rpm

補充工具,用于監控cronie任務執行情況,如果任務計劃在該執行的時間點沒有執行,則anacron會随後啟動一次任務計劃

cat /etc/anacrontab

rpm -ivh /misc/cd/Packages/crontabs-1.10-33.el6.noarch.rpm

包括了和系統相關的輔助性計劃任務

/etc/crontab :屬于系統的關于任務計劃的配置檔案,這個檔案定義了計劃任務相關資訊

[root@centos7 ~]#cat /etc/crontab

SHELL=/bin/bash :用的shell類型

PATH=/sbin:/bin:/usr/sbin:/usr/bin :計劃任務有一些可執行程式,這些程式在哪個路徑下搜尋

MAILTO=root :如果計劃發現資訊,給相應的人發郵件

# For details see man 4 crontabs

# Example of job definition:

# .---------------- minute (0 - 59) 幾分鐘

# | .------------- hour (0 - 23) 幾小時小時

# | | .---------- day of month (1 - 31) 幾天

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... 一年12個月

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 星期幾,也可以 1-5顯示星期一到星期五

# | | | | |

# * * * * * user-name command to be executed

*代表每分鐘,每小時,每天,每月,每星期

例:

52 16 * * * root wall hello

16點52分 每天 每月 每星期 root使用者 執行廣播

1 17 * * * root tar zcvf /data/etc.tar.gz /etc/ &> /dev/null

5點01分 每天 每月 每星期 root使用者執行/etc/下的檔案壓縮到data目錄下 ,并重定向到垃圾黑洞

标準輸出重定向到/dev/null ,不然會發送垃圾郵件

16 17 1,10,20 * * root

1号,10号,20号,每月每星期17點16分 root使用者執行某程式

16 17 1,10,20 * 0,6 root tar Jcvf /data/etc.tar.xz /etc/ &> /dev/null

1号,10号,20号或星期日和星期六17點16分 root使用者執行程式

ti=`date +%u`

[ $ti -eq 6 -o $ti -eq 0 ] && wall hello

chmod +x f2.sh

vim /etc/crontab

40 17 * * * root /root/f2.sh

每天每月每星期17點40執行f2.sh腳本

40 17 1.10,20 * 0,6 root /root/f2.sh

每月的1号10号20号并且星期日和星期六執行程式

*/10 17 1.10,20 * 0,6 root /root/f2.sh

17點每10分鐘執行一次

* * * * * root f2.sh

root使用者每分鐘執行一次腳本

1 * * * * root f2.sh

root使用者每小時的第一分鐘執行一次腳本

vim f3.sh

md0 指令

leep 20 休眠20秒

md20 指令

md30 指令

* * * * * root f3.sh

每20秒執行一次指令

usleep可以精确到微秒 1000000微秒等于一秒

@monthly root /root/f2.sh

每月1号執行一次檔案

@reboot root /root/f2.sh

當重新開機的時候執行某個操作

@hourly 一小時執行一次

@daily 一天執行一次

@weekly 一周執行一次

@monthly 一月執行一次

@annually 一年執行一次

cat /var/log/cron 日志記錄了目前發生的事件

每個單使用者建立任務計劃用 crontab

crontab -e 要建立計劃任務

* * * * * wall hello 每分鐘廣播一次 不需要寫使用者名

cat /var/spool/cron 計劃任務放在這個檔案,放在磁盤上

在root使用者編輯普通使用者的計劃任務

crontab -l -u wang 檢視wang使用者的計劃任務

crontab -e -u wang 編輯wang使用者的計劃任務

crontab -r -u wang 删除wang使用者的計劃任務

單使用者的白名單和黑名單

白名單 :/etc/cron.allow 預設不存在,要建立,将使用者加入白名單

黑名單 :/etc/cron.deny 預設存在 将使用者寫入檔案,使用者就不能執行任務計劃

在cron裡面的%号有特殊含義,不能直接使用,寫在腳本裡面直接調用

練習題

1、每周的工作日1:30,将/etc備份至/backup目錄中,儲存的檔案名稱格式

為“etcbak-yyyy-mm-dd-HH.tar.xz” ,其中日期是前一天的時間

vim time.sh

date -d "-1 day" +%F-%H

chmod +x time.sh

05 21 * * * root tar Jcvf /data/etcbak-`. time.sh`.tar.xz /etc/

2、每兩小時取出目前系統/proc/meminfo檔案中以S或M開頭的資訊追加至

/tmp/meminfo.txt檔案中

* */2 * * * cat /proc/meminfo |egrep "^(S|M)" >> /tmp/meminfo.txt

3、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區使用率高

于80%,就執行wall警報

vim disk.sh

disk1=`df |grep "sd" |sed -r "s/.*[ ]+([0-9]{1,3}).*/\1/" |sort -nr |head -n1`

disk2=`df -i |grep "sd" |sed -r "s/.*[ ]+([0-9]{1,3}).*/\1/" |sort -nr |head -n1`

[ $disk1 -ge 80 -o $disk2 -ge 80 ] && wall Disk over 80%

*/10 * * * 1-5 root disk.sh

$RANDOM 産生随機數字

$[$uid%2] $uid是一個數字,

[ $[$uid%2] -eq 0 ] 數字除2等于0就是偶數

任務計劃分為兩種:

第一種是一次性計劃at

第二種是周期性計劃crontab

<b>一次性計劃任務:在未來的某個時間執行一次性計劃任務 at</b>

centos7 開啟 :systemctl start atd

centos6 開啟 :service atd start

at&gt; &lt;EOT&gt;     Ctrl+d 結束

任務計劃被放在at目錄下的檔案裡面,重新開機不會丢失

[root@centos6 ~]#at -f  f1.txt now + 1minutes

如果計劃任務帶标準輸出,不會在目前終端顯示,但是它會以郵件的方式發給你,這樣就會造成大量的垃圾郵件,把标準輸出重定向到&amp;&gt; /dev/null ,就不會收到郵件

at -m 如果你不知道你的任務計劃執有沒有執行,就加一個-m強制發郵件,到你的郵箱

黑名單 :/etc/at.deny 預設存在将使用者寫入檔案,使用者就不能執行任務計劃

規則 :如果有白名單,隻有白名單裡面的使用者能執行任務計劃,其他使用者不能執行

如果沒有白名單,隻有黑名單那隻有黑名單裡面的使用者不能執行任務計劃,其他使用者都可以

<b> </b><b>周期性計劃任務 cron</b>

MAILTO=root :如果計劃發出資訊,給相應的人發郵件

# .—————- minute (0 – 59) 幾分鐘

# | .————- hour (0 – 23) 幾小時小時

# | | .———- day of month (1 – 31) 幾天

# | | | .——- month (1 – 12) OR jan,feb,mar,apr … 一年12個月

# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat 星期幾,也可以 1-5顯示星期一到星期五

* * * * *代表每分鐘,每小時,每天,每月,每星期

ti=date +%u 設定一個ti的變量

[ $ti -eq 6 -o $ti -eq 0 ] &amp;&amp; wall hello   如果數字等于6會在0 會發送一個hello的廣播

星期六和星期日17點40執行f2.sh腳本,發送廣播

ti=date +%u

40 17 1,10,20 * * root /root/f2.sh

每月的1号10号20号并且星期日和星期六17:40執行程式

例:執行指令的間隔為秒

md0執行 指令

md20 執行指令

md30執行 指令

<b>每個單使用者建立任務計劃用 crontab</b>

cat /var/spool/cron 計劃任務放在這個檔案,在root使用者下可以檢視和修改

黑名單 :/etc/cron.deny 預設存在将使用者寫入檔案,使用者就不能執行任務計劃

date -d “-1 day” +%F-%H

05 21 * * * root tar Jcvf /data/etcbak-. time.sh.tar.xz /etc/

* */2 * * * cat /proc/meminfo |egrep “^(S|M)” &gt;&gt; /tmp/meminfo.txt

disk1=df |grep "sd" |sed -r "s/.*[ ]+([0-9]{1,3}).*/\1/" |sort -nr |head -n1

disk2=df -i |grep "sd" |sed -r "s/.*[ ]+([0-9]{1,3}).*/\1/" |sort -nr |head -n1

繼續閱讀