進程管理及計劃任務
阿新 • • 發佈:2017-05-13
方法 filename bin png 完整 統計數據 ade 計劃任務 小時
進程的概念:
- 內核的功用:進程管理,文件系統,網絡功能,內存管理, 驅動程序,等
- process:運行中的程序的一個副本,是被載入內存的一個指令集合
- 進程ID(process ID,PID)號碼被用來標記各個進程,UID, GID和SELinux語境決定對文件系統的存取和訪問權限.通常從執行進程的用戶來繼承
- 在Centos6以前第一個進程init
- Centos7是systemd 為父子關系
- 進程:都是由其父進程創建,使用cow機制,(寫時復制)
- 在沒有寫之前父子功用同一個空間,之後子進程單獨指向其復制空間
- 進程優先級
- 系統優先級:數字越小優先級越高 (0-99)
- 實時(realtime)優先級:值越大優先級越高(99-0)
- nice優先級: 值越小優先級越高 (-20-19) 相當於系統99範圍內
- 進程相關概念
- 進程內存:
- page Frame:頁框,yong存儲頁面數據,存儲page 4k
- LRU:Least Recently Used 近期最少使用算法,釋放內存
- 進程狀態
- Linux內核:搶占式多任務
- 進程類型:
- 守護進程:daemon,相當於服務進程,在系統引導過程中啟動的進程,和終端無關進程
- 前臺進程:跟終端相關,通過終端啟動的進程 占用窗口
- 前後臺兩者可以轉換
- 進程狀態
- 運行態:running
- 就緒態:ready
- 睡眠態: 可中斷:intrruptable
- 不可中斷:uninterruptable
- 停止態: stopped,暫停與內存,但不會被調用,除非手動啟動
- 僵死態:zombie:結束進程,父進程結束前,子進程不關閉(重啟解決)
進程管理工具
- 進程分類:
- cpu密集型,非交互
- IO密集型,交互
- Linux系統狀態的查看及管理工具:
- pstree , ps , pidof, pgrep , top , htop, glance, pamap, vmstat, dstat,
- kill, pkill, job, bg, fg, nphup
- Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中
- pstree命令:
- 列舉進程ps
- 適用於ps在查看進程信息
- ps [OPRION]
- 支持三種選項:
- UNIX選項 -A -e
- BSD選項 A e
- GNU選項 --help
- 選項:
- a :查看所有終端的進程
- x:顯示守護進程
- u:顯示進程所屬者信息
- f :顯示進程的父進程
- k|--sort 屬性 對屬性排序
- o 屬性...選項顯示定制的信息
- echo $$顯示當前進程
- echo $PPID顯示父進程
進程管理工具
- VSZ:Virtual menmory size,虛擬內存集,線性內存
- RSS:ReSident Size, 常駐內存集
- STAT:進程狀態
- R:running
- S:interruptable sleeping
- D:uninterruptable sleeping
- T: sropped
- Z:zombiie
- +:前臺進程
- l:多線程進程
- L:內存分頁並帶鎖
- N:低優先級進程
- <:高優先級進程
- s:session leader ,會話(子進程)發起者
- 常用組合: -ef
- -e:顯示所有進程
- -f:顯示完整格式程序信息
- -eFH:
- -F:顯示更完整格式的進程信息
- -H:以進程層次格式顯示進程相關信息
- 自定義:
- ps axo pid,comm,euid,ruid,tty,psr...
- ps axo pid,comm,euid,ruid,tty,rtprio,pri ..
- ni:nice值
- pri:priority 優先級
- psr:processor CPU編號
- rtprio: 實時有優先級
- ps axo pid,comm,ni,psr,tty,rtprio,pri ..
- 搜索進程
- 但與定義的模式:pgrep
- -u uid: 生效者
- -U:真正執行命令者
- -l :顯示進程的名稱
- -t: 查看指定終端運行的進程
- -P:顯示指定進程的進程
- -a:顯示完整格式的進程名稱
- 安確切的程序名稱: /sbin/pidof
- pidof bash
- uptime:顯示當前時間,系統已啟動的時間,當前上線人數,系統平均負載(1,5, 10分鐘的平均負載,一般不會超過1)
- 系統平均負載:
- 只在特定時間間隔內運行隊列中的平均進程數
- 通常每個cpu內核到的當前活動進程數不大於3,那麽系統的性能良好.如果每個cpu內核的任務數大於5,那麽主機的性能有嚴重問題
- 如果Linux主機是1個雙核cpu,當Load Average為6的時候說明機器已經被充分使用
- top:實時跟蹤當前進程狀態相當於windows任務管理器
內存工具
- iostat:統計cpu和設備Io信息
- iostat 1 10
- pmap命令:進程對應的內存映射
- -x :顯示詳細格式的信息
- pmap 1
- 另一種實現:
- cat /proc/PID/maps
- 系統監控工具
- dstat命令:系統資源統計,代替vmstat,iostat
- -c:顯示cpu相關信息
- -d:顯示disk相關信息
- -g:顯示page相關統計數據
- -m:顯示memory相關統計數據
- -n:顯示network相關統計數據
- -p:顯示process相關統計數據
- -r:顯示io請求相關的統計數據
- -s:顯示seapped相關的統計數據
-
進程管理工具
- kill命令:
- 向系統發送控制進程信號,以實現對進程管理,每個信號對應一個數字,
- 信號名稱已SIG開頭,不區分大小寫
- 顯示當前系統可用信號:kill -l, trap -l
- 常用信號: man 7 signal
- 1 :無需關閉進程而讓其重讀配置文件
- 2 :終止正在運行的進程;相當於ctrl +c
- 3:相當於ctrl+\
- 9:強制殺死正在運行的進程
- 15:終止正在運行的進程
- 18:繼續運行
- 19:後臺休眠
- 指定信號的方法:
- 信號的數字標識:1 ,2 ,9
- 信號完整名稱: SIGHUP
- 信號的簡寫名稱:HUP
- kill all :殺死全部
- 示例:
- kill -1 PIDOF
- kill PROCESSNAME
- 按PID :kill [-SIGNAL] pid ...
- kill -n SIGNAL pid
- 按名稱:killall [-SIGNAL] comm
- 按模式:pkill [option] pattern
- -SIGNAL
- -u uid:
- pkill -9 -u user 強制殺掉指定用戶所有進程
- -u uid: 生效者
- -U:真正執行命令者
- -l :顯示進程的名稱
- -t: 查看指定終端運行的進程
- -P:顯示指定進程的進程
- -a:顯示完整格式的進程名稱
- 安確切的程序名稱: /sbin/pidof
- pidof顯示進程編號
- process 進程
- thread 線程
- 在進程到的眼裏他擁有除系統以外所有內存
- 線程可共享資源(l表示有線程)
Linux的作業控制
- 前臺作業:通過終端啟動,且啟動後一直占據終端;
- 後臺作業:可通過終端啟動,但啟動後即轉如後臺運行
- 上作業運行與後臺
- 1 運行中作業: Ctrl+z :送往後臺,作業會轉為停止狀態
- 尚未啟動的作業:#COMMAND&
- 作業雖然被送往後臺運行,但其依然與終端相關;退出終端,將關閉後臺作業.
- 如果希望送往後臺,剝離與終端的關系
- # nohup COMMAND & # screen;COMMAND
- 查看當前終端素有作業:
- jobs
- 作業控制:
- fg :把指定的後臺作業調會前臺
- bg:讓送往後臺的作業在後臺繼續運行
- kill 終止指定的作業
linux任務計劃,周期性任務執行
- 未來的某時間點執行一次某任務:at.batch
- batch:系統自行選擇空閑時間去執行此處指定的作業任務
- 周期性運行某任務:crontab
- 執行結果:會通過郵件發送給用戶
- 首先確定at命令是否處於啟動狀態
- chkconfig --list atd 查看其那些模式下處於啟動狀態
- service atd status 查看其服務啟動狀態
at命令默認交互式
- at [option]...TIME
- TIME:
- HH:MM[YYYY-mm-dd]
- noon,正午時間 , midnight午夜時間,teatime,指下午4點
- tomorrow +具體時間
- 相對指定 now+#
- UNIT:minutes hours,days,
- at now+1min xxxx 一分鐘以後運行xxxx
- 示例:
- [[email protected] ~]# at noon
- at> echo o<EOT>
- job 8 at 2017-05-13 12:00
- [[email protected] ~]# at now +10days
- at> echo p
- at> <EOT>
- job 9 at 2017-05-22 14:35
- 編輯額按成後ctrl +d 提交
- [[email protected] ~]# at 13:20
- at> touch op
- at> <EOT>
- at的作業有隊例,用單個字母表示,默認都是用隊列,
- -V: 顯示版本信息
- -l 查看 作業隊列,相當於atq
- [[email protected] ~]# at -l
- 3 2017-05-13 13:20 a root
- 如果任務一執行則會消失,任務執行結果信息會通過郵件查看
- -f:/PATH/FROM/SOMEFIE:從指定文件中讀取作業,而非交互輸入
- cat filename | at HH:MM
- [[email protected] ~]# echo echo dsd > job
- [[email protected] ~]# at -f job 13:30
- job 5 at 2017-05-13 13:30
- [[email protected] ~]# at -l
- 5 2017-05-13 13:30 a root
- 4 2017-05-12 15:30 a root
- [[email protected] ~]# cat job |at 15:38
- job 6 at 2017-05-12 15:38
- -m:當任務被完成後強制性給用戶發郵件
- [[email protected] ~]# at -m 22:33
- at> touch oo
- -d:指明刪除作業,相當於atrm
- [[email protected] ~]# at -l
- 3 2017-05-13 13:20 a root
- [[email protected] ~]# at -d 3
- [[email protected] ~]# at -l
- -c:查看具體作業任務
- [[email protected] ~]# cat job |at 15:38
- job 7 at 2017-05-12 15:38
- [[email protected] ~]# at -c 7
- -q:指明隊列;
- 如果定義的任務時間相同那麽將會同事執行;
- 註意作業執行結果是已郵件發送給提交作業的用戶,不會打印到終端.
- 如果所設定的任務已過當前時間則會在下一次這個時間點執行
- 重啟不會失效,因為其任務存放於"/var/spool/at"文件裏.
- /etc/at.{allow,deny}控制用戶是否能執行at任務
- 白名單at.allow :優先級高,由此文件,deny無效,只有此此文件中的用戶可使用at
- 黑名單at.deny 優限級低,此文件中的用戶拒絕,不在此文件允許
- 如果都沒有全都拒絕不包括root用
周期性任務計劃:cron
- 服務程序:
- cronie:主程序包 ,提供了crond守護進程及相關輔助工具;
- 確保crond守護進程(daemon)處於運行狀態
- centos7 systmectl status crond.service 查看
- centos6 service crond status
- 向crond提交作業的方式不同於at, 他需要使用專用配置文件, 此文件固定格式,不建議使用文本編輯器直接編輯此文件;要是用crontab的命令;
- cron任務分兩類:
- 系統cron任務:主要用於實現系統自身的維護:
- 手動編輯: /etc/crontab文件
- 用戶cron任務:
- 命令: crontab
- 系統cron配置格式:
- 註意:
- 1 . 每一行定義一個周期性任務:
- *****:定義周期性時間任務
- username:運行任務的用戶身份
- comanmd to be executed: 任務
- 2 . 此處的環境變量不同於用戶登錄後獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量;
- 示例:
- 因為 cron 不支持特殊符號所以復雜行的任務可將其寫入腳本再加以引用
- cp -a /etc/ /app/etcbak-`date +%s`
- 表示每月,每周,每天,每小時,每分鐘 都備份指定任務
- 用戶cron的配置格式: /var/spool/cron/USERNAME
- 註意:
- 1 . 每行定義一個corn任務,
- 2 . 此處的環境變量不同於用戶登錄後獲得的環境,因此,建議命令使用絕對路徑,或者指定以PATH 環境變量;
- 3 . 郵件發送給當前用戶:
-
管理臨時文件:
- centos6使用/etc/cron.daiy/tmpwatch定時清除臨時文件
- centons7使用systemd-tmpfiles-setup服務實現
- /var/log/cron 計劃任務日誌文件
- 時間表示法:
- 1 . 特定值:
- 給定時間點有效取值範圍內的值;
- 註意:day of week 和dayof moth一般不同時使用;
- 2 . *
- 給定時間上有效取值範圍內的所有值;表示"每..."
- 3 . 離散取值:
- 在時間點上使用逗號分隔的多個值;
- #,#,#
- 4 . 連續取值:
- 在時間點上使用-連接開頭和結束
- #-#
- 5, 在指定時間點上,定義步長;/#
- /#:#即步長;
- */2:每兩分鐘
- 註意:指定的時間不能被步長整除時,其意義將不復存在;
- 最小時間單位為分鐘, 想完成"秒級"任務,得需要額外借助其他機制;
- 定義成每分鐘任務;而在利用腳本實現每分鐘之內循環執行的次數
- 示例:
- 1 . 3 * * * :每小時執行一次; 每小時第3分鐘;
- 2 . 34* * 5;每周五的4點3分; 每周執行一次
- 3 . 567* *: 每月執行一次:每月的7號的6點5分;
- 4 . 78910*:每年執行一次:每年的10月9號8點7分;
- 5 . 98**3,7:每周三和周日; 8點9分
- 6 . 08,20**3,7: 每周日和周三 :8點和20點
- 7 . 09-18**1-5: 工作時間內的每小時;周一到周五的白天的9-18點
- 8 . */5****;每5分鐘執行一次某任務;
crontab命令
- crontab[-u user]]-l | -e] [-i][-s]
- -e :編輯任務:
- crontab -l 列出所有任務
- -r :移除所有任務;即刪除/var/spool/cron/USERNAME文件;
- -i :在使用-r選項移除所有任務時提示用戶確認;
- -u:user:root用戶可為指定用戶管理cron任務;
- crontab -e -u user: ROOT指定用戶任務
- 用戶自己也可以創建任務因為其擁有SUID權限
- [[email protected] ~]# ll /usr/bin/crontab
- -rwsr-xr-x. 1 root root 51784 Nov 10 2015 /usr/bin/crontab
- crontab -l 查看自己的計劃任務
- crontab -r 刪除自己所有任務
- crontab -r -u user 刪除指定任務
- crontab -r -u user -i 交互式指定刪除
- 如果誤刪可以在 /var/spool/cron 日誌裏
- 註意:運行結果以郵件通知給當前用戶; 如果拒絕接受郵件;
- 1 COMMAND > /dev/null
- 2COMMAND &>/dev/null
- 註意:
- 定義 COMMAND時,如果命令需要用到%,需要對其轉義;但防止與但因號中的%不用轉義亦可;
- 如果某任務在指定的時間因關機未能執行,下次開機會不會自動執行?
- 不會
- 如果期望某時間故未能按時執行,下次開機後無論是否到了相應時間點都要執行一次,可使用anacron實現;
- 練習:
- 1 . 每12小時備份一次/etc目錄至/backups目錄中,保存文件名稱格式為"etc-yyyy-mm-dd-hh"
- crontab -e 0 */12 * * * cp -a /etc/ /backups/etc-`date +%F` /
- 2 . 每周2, 4 ,7備份/var/log/secure文件至/logs目錄中,文件格式為"secure-yyyymmdd";
- crontab -e * * 2,4,7 * * cp -a /var/log/secure /logs/secure `date +%F`
- 3 , 每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的行信息追加至/tmp/meminfo.txt文件中;
- crontab -e 0 */2 * * * grep -E ‘^(S|M)‘ /proc/meminfo >> /tmp/meminfo.txt
進程管理及計劃任務