進程和計劃任務

進程概念:

內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等

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)手工啓動

  前臺啓動:用戶輸入命令直接執行程序

 blob.png

     後臺啓動:在命令行尾加入“&”符號(即把這個命令放在後臺執行,執行後,會顯示一個後臺任務順序號和一個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











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章