進程概念:
內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
Process: 運行中的程序的一個副本,是被載入內存的一個指令集合 進程ID(Process ID,PID)號碼被用來標記各個進程 UID、GID、和SELinux語境決定對文件系統的存取和訪問權限, 通常從執行進程的用戶來繼承 存在生命週期
• task struct:Linux內核存儲進程信息的數據結構格式
• task list:多個任務的的task struct組成的鏈表
• 進程創建: init:第一個進程 父子關係 進程:都由其父進程創建,CoW fork(), clone()
進程:在CPU及內存中運行的程序代碼; 是動態執行的代碼;
父、子進程:每個進程可以創建一個或多個進程
查看進程時間
1)、ps命令
用途:查看靜態的進程統計信息
格式:ps aux ==>顯示系統所有進程
ps -elf ==>以長格式顯示
2)、top命令
用途:查看動態的進程排名信息
格式:top
3)、pgrep命令
用途:根據特定條件查詢進程PID信息
4)、pstree命令
用途:以樹型結構顯示各進程間的關係
格式:pstree [-aup]
3、進程的不同啓動方式
1)手工啓動
前臺啓動:用戶輸入命令直接執行程序
後臺啓動:在命令行尾加入“&”符號(即把這個命令放在後臺執行,執行後,會顯示一個後臺任務順序號和一個PID號)
計劃任務
at任務:使用at命令,設置在某個特定的時間,執行一次任務,可以說是臨時的,因爲執行一次便從計劃中刪除。
at命令:
設置格式:at [HH:MM] [yyyy-mm-dd]
at [option] TIME
• 常用選項:
-V 顯示版本信息:
-l: 列出指定隊列中等待運行的作業;相當於atq
-d: 刪除指定的作業;相當於atrm -c: 查看具體作業任務
-f /path/from/somefile:從指定的文件中讀取任務
-m:當任務被完成之後,將給用戶發送郵件,即使沒有標準輸出
(at的數據存放在/var/spool/at/下 如需要修改at ,只能直接修改文件)
/etc/at.deny 寫入該文件的用戶不能配置at
/etc/at.allow 默認不存在,不存在時,deny文件有效,當allow存在,deny失效,只有寫入allow的用戶才能配置at。
週期性計劃任務 cron
按照預先設置的時間週期(分,時,日,月,周幾)重複執行用戶指定的命令操作,屬於週期性計劃任務
相關的程序包: cronie: 主程序包,提供crond守護進程及相關輔助工具; cronie-anacron:cronie的補充程序,用於監控cronie任務執行狀況,如cronie中的任務在 過去該運行的時間點未能正常運行,則anacron會隨後啓動一次此任務 crontabs:包含CentOS提供系統維護任務
確保crond守護處於運行狀態: CentOS 7: systemctl status crond ;CentOS 6: service crond status
計劃週期性執行的任務提交給crond,到指定時間會自動運行
系統cron任務:系統維護作業 /etc/crontab
用戶cron任務: crontab命令
• 日誌:/var/log/cron
• 系統cron任務:/etc/crontab
• 註釋行以 # 開頭
• 詳情參見 man 5 crontab
# 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
• 例如:晚上9點10分運行echo命令 10 21 * * * centos /bin/echo "Howdy!"
每3小時echo和wall命令 0 */3 * * * centos /bin/echo “howdy”;/usr/bin/wall “welcome to China”
• 用戶cron:( 用戶級計劃任務)
• crontab命令定義,每個用戶都有專用的cron任務文件:/var/spool/cron/USERNAME
• crontab命令: crontab [-u user] [-l | -r | -e] [-i] -l: 列出所有任務;
-e: 編輯任務;
-r: 移除所有任務;
-i:同-r一同使用,以交互式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務
• 控制用戶執行計劃任務: /etc/cron.{allow,deny}
root用戶可以管理指定用戶的計劃任務;普通用戶只能管理自己的計劃任務)
(備註:用戶只需執行“crontab -e”命令後會自動調用文本編輯器(默認爲vi)並打開“/var/spool/cron/用戶名”文件,無需手動指定文件位置)
crontab應用簡單舉例
示例1:root用戶需求: 每天早上7:50自動開啓sshd服務,22點50時關閉
每隔5天清空一次FTP服務器公共目錄/var/ftp/pub
每週六的7:30時,重新啓動httpd服務
每週一、三、五的17:30時,打包備份/etc/httpd目錄
crontab -e
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 * */5 * * /bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd
1、每天的2點和12點整,將/etc備份至/testdir/backup目錄中,保存的文件名稱格式爲“etcbak-yyyy-mm-dd-HH.tar.xz”
* 2,12 * * * root /bin/mkdir -p /testdir/backup; /bin/tar Jcvf /testdir/backup/etcbak-$(/bin/date +\%F-\%H).tar.xz /etc
(注意:1,在/etc/crontab下編輯,一定要注意帶絕對路徑;2,gzip對應z ,bzip2對應j ,xz對應J;3,%在這裏要加上轉義符號\)
2、每週2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd”
* * * * 2,4,7 root /bin/cp -av /var/log/messages /logs/messages-$(/bin/date +\%Y\%m\%d)
3、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
0 */2 * * * root /bin/cat /proc/meminfo | /bin/grep -e ^S -e ^M >> /tmp/meminfo.txt
4、工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率高於80%,就執行wall警報
朝9晚5 週一到週五
編輯一個腳本
#!/bin/bash
if [ $(df |tr -s ' '|cut -d' ' -f5|sort -rn|head -1) -gt 80 ];then
wall "有分區大於80%"
fi
crontab -e 寫入*/10 9-17 * * 1-5 /root/zhouyi.sh