程序概念:
核心的功用:程序管理、檔案系統、網絡功能、記憶體管理、驅動程式、安全功能等
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:當任務被完成之後,将給使用者發送郵件,即使沒有标準輸出
周期性計劃任務 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目錄
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