天天看點

程序和計劃任務

程序概念:

核心的功用:程序管理、檔案系統、網絡功能、記憶體管理、驅動程式、安全功能等

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