Linux例行工作

  1. Linux工作調度的種類
    • at:at是個可以處理僅執行一次就結束調度的命令,不過要執行at,必須有atd服務。某些新版的distributions中,atd可能默認沒有啓動。
    • crontab:crontab所設置的工作將會循環一直進行下去。這個命令除了可以使用命令執行外,也可以編輯/etc/crontab來支持。讓crontab生效的服務則是crond這個服務。
  2. Linux上常見的例行工作
    • 進行日誌文件的輪替(log rotate):適時將日誌文件數據挪一挪,讓舊數據與新數據分別存放,則比較可以有效地記錄日誌信息。
    • 日誌文件分析logwatch的任務:系統發生軟件問題,硬件錯誤,絕大部分的錯誤信息都會被記錄在日誌文件中,因此係統管理員的重要任務之一就是分析日誌文件。所以CentOS提供了logwatch來主動分析日誌信息。
    • 新建locate數據庫:locate命令是通過已經存在的文件名數據庫來進行系統文件名的查詢。文件名數據庫是放置再/var/lib/mlocate/中。系統更新這個數據庫就是通過update。
    • whatis數據庫的建立:whatis是與man page有關的一個查詢命令,不過要使用whatis命令時,必須擁有whatis數據庫,而這個數據庫也是通過系統例行工作調度來自動執行的。
    • RPM軟件日誌文件的新建/RPM是一種軟件管理的機制。由於系統可能會經常更改軟件,包括軟件的新安裝,非經常性更新等,都會造成軟件文件名的區別。爲了方便追蹤,系統幫我們將文件名做個排序的記錄。
    • 刪除臨時文件:某些軟件再運行時會生成臨時文件,但是當這個軟件關閉的時候,臨時文件可能不會主動刪除。系統通過例行工作調度執行名爲tmpwatch的命令來刪除這些臨時文件。
    • 與網絡服務有關的分析行爲:如果安裝了WWW服務器軟件,那麼你的Linux系統通常就會主動分析該軟件的日誌文件,同時某些認證的網絡信息是否過期的問題,這些Linux都會自動幫你檢查。
  3. 僅執行一次的工作調度
    • atd的啓動和at運行的方式
      要使用單一工作調度,必須開啓atd

      [root@www~]# /etc/init.d/atd restart                    <==啓動atd
      [root@www~]# chkconfig atd on                         <==設置開機時啓動這個服務,免得每次重新啓動都要再來一次
      
    • at的運行方式
      我們用at命令來生成所要運行的工作,並將這個工作以文本文件的方式寫入/var/spool/at目錄內,該工作便能等待atd這個服務的取用與執行了。

      • 我們可以用/etc/at.allow這個文件,寫在這個文件中的用戶才能使用at,沒有在這個文件中的用戶則不能使用at(即使沒有寫在at.deny中)
      • 如果/etc/at.allow不存在,就尋找/etc/at.deny這個文件,若寫在這個at.deny的用戶則不能使用at,而沒有在這個at.deny文件中的用戶就可以使用at
      • 如果兩個文件都不存在,那麼只有root可以使用at命令
    • 實際運行單一工作調度

      [root@www~]# at [-mldv] TIME
      [root@www~]# at -c 工作號碼
      
      參數 含義
      -m 當at工作完成後,即使沒有輸出信息,以email通知用戶該工作完成
      -l at -l相當於atq,列出目前系統上面的所有該用戶的at調度
      -d at -d相當於atrm,可以取消一個在at調度中的工作
      -v 可以使用較明顯的時間格式列出at調度中的任務列表
      -c 可以列出後面接的該項工作的實際命令內容

      TIME時間格式:這裏可以定義什麼時候要進行at這項工作的時間

      格式 含義
      HH:MM 幾點幾分,如果今天已經超過了,就要明天這個時候進行 ex>04:00
      HH:MM YYYY-MM-DD 強制規定在某年某月某日某一天的特殊時刻進行該工作 ex>04:00 2019-01-17
      HH:MM[am|pm] [Month] [Date] 強制規定在某年某月某日某一天的特殊時刻進行該工作 ex>04:00 am March 17
      HH:MM[am|pm] + number [minutes|hours|days|weeks] 在某個時間點再加上幾個時間之後,ex>04pm + 3 days
      [root@www~]# at now + 5 minutes    #執行at會進入at shell環境,讓你執行多重命令
      at> /bin/mail root -s "testing at job" < /root/.bashrc
      at> <EOT>   <==這裏輸入[ctrl]+d就會出現<EOF>,代表結束
      job 4 at 2009-03-14 15:38      #說明第4個at工作將會在2009年/03/14的15:38進行
      
      [root@www~]# at 23:00 2009-03-07
      at> /bin/sync
      at> /bin/sync
      at> /sbin/shutdown -h now
      at> <EOT>
      job 5 at 2009-03-17 23:00
      

      注意,如果at shell命令內沒有任何信息輸出,那麼at默認不會發Email給執行者,如果想讓at命令無論如何都要發送Email,那麼就要用at -m命令。
      由於at在工作調度的使用上,系統會將該項at工作獨立出你的bash環境,直接交給系統的atd程序來接管,因此,當你執行了at的工作之後就可以立刻脫機,剩下的工作就完全交給Linux管理即可。
      at的工作管理,執行了at之後才發現命令錯誤,可以利用atq和atrm把它刪除。

      [root@www~]# atq
      [root@www~]# atrm [jobnumber]
      例子:
      查詢目前主機上有所少個at工作調度
      [root@www~]# atq
      5    2009-03-17 23:00 a root
      #上面的意思是在2009/03/17的23:00有一項工作,該工作命令執行者爲root,而且,該項工作的工作號碼是5
      [root@www~]# atrm 5          #說明刪除工作號爲5的工作
      [root@www~]# atq              #沒有顯示任何信息,說明工作已經被刪除
      

      如果你是在一個非常忙碌的系統下運行at,那麼你可以通過batch指定你的工作在系統較閒的時候進行。
      batch可以指定在系統有空時才進行後臺任務,它會在CPU工作負載小於0.8的時候,才進行你所執行的工作任務。負載的意思是CPU在單一時間點所負責的工作數量,不是CPU的使用率。

      #同樣進行關機操作,但是如果當時系統負載太高,則暫緩執行
      [root@www~]# batch 23:00 2009-03-17
      at> sync
      at> sync
      at< shutdown -h now
      at> <EOT>
      job 6 at 2009-03-17 23:00
      
  4. 循環執行的例行性工作調度
    相對於at是僅執行一次的工作,循環執行的例行性工作調度則是由cron(crond)這個系統服務來控制的。
    • 用戶設置
      /etc/cron.allow 將可以使用crontab的賬號寫入其中,若不在這個文件內的用戶則不可使用crontab。
      /etc/cron.deny 將可以使用crontab的賬號寫入其中,若未記錄到這個文件當中的用戶則可以使用crontab
      以優先級來說,cron.allow的優先級高於cron.deny。當用戶使用crontab這個命令來新建工作調度之後,該項工作就會被記錄到/var/spool/cron裏面,而且是以賬號來作爲判別。舉例,用戶名爲dmtsai使用crontab後,他的工作會被記錄到/var/spool/cron/dmtsai裏面。注意,不要使用vi直接編輯文件,因爲可能由於輸入語法錯誤,會導致無法執行cron。
      crontab參數
      參數 含義
      -u 只有root才能進行這個任務,也即幫其他用戶新建/刪除crontab工作調度
      -e 編輯crontab的工作內容
      -l 查閱crontab工作內容
      -r 刪除所有crontab的工作內容,若要刪除一項,請用-e去編輯
      [root@www~]# crontab -e    #用dmtsai的身份在每天的12:00發信給自己
      #此時會進入vi編輯界面讓你編輯工作,注意每一項工作都是一行
      0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.basgrc 
      #分 時 日 月 周 |<========命令串=================>|
      
      代表意義 分鐘 小時 日期 月份 命令
      數字範圍 0~59 0~23 1~31 1~12 0~7 命令
      注意周的部分,0或者7都代表星期天。同時還有一些輔助字符。
      特殊字符 代表意義
      * 任何時刻都接受的意思。如果日,月,周都是*號,代表不論何月何日的星期幾
      , 代表分隔時段的意思,舉例子,如果執行工作是3:00到6:00,所以就是0 3,6 * * * command
      - 代表一段時間範圍,舉例,8點到12點之間每小時的20分都進行一項工作 20 8-12 * * * command
      /n(斜線) 那個n代表數字,即是每隔n單位間隔的意思,例如每五分鐘進行一次,則*/5 * * * * command 也可以把*/5寫成0-59/5
    • 系統的配置文件:/etc/crontab
      crontab -e 這個命令是針對用戶,如果是系統的例行性任務,就不需要以crontab -e 來管理你的例行性工作調度,只需要編輯/etc/crontab這個文件就可以。其中有一點需要注意,crontab -e 這個crontab其實是/usr/bin/crontab這個執行文件,但是/etc/craontab是一個純文本文件。
      基本上,cron這個服務的最低檢測限制就是分鐘,所以cron會每分鐘去讀取一次/etc/crontab與/var/spool/cron裏面的數據內容,因此,只要你編輯完/etc/crontab這個文件,並且將它保存之後,那麼cron的設置就會自動會來執行。
      查看/etc/crontab的內容
      [root@www~]# cat /etc/crontab
      SHELL=/bin/bash       <==使用哪種shell接口
      PATH=/sbin:/bin:/usr/sbin:/usr/bin        <==執行文件查找路徑
      MAILTO=root        <==若有額外STDOUT,以email將數據送給誰
      HOME=/                   <==默認此shell的主文件夾所在
      
      #run-parts
      01 * * * * root run-parts /etc/cron.hourly     <==每小時
      02 4 * * * root run-parts /etc/cron.daily     <==每天
      22 4 * * 0 root run-parts /etc/cron.weekly  <==每週日
      42 4 1 * * root run-parts /etc/cron.weekly  <==每個月1號
      
      在crontab裏面一些字段的含義
      字段 含義
      MAILTO=root 當/etc/crontab這個文件中的例行性工作的命令發生錯誤時,或者是該工作
      PATH=… 這裏輸入的是執行文件的查找路徑,使用默認的路徑設置就已經足夠了
      01 * * * * root run-parts /etc/cron.hourly 如果想讓系統每小時主動幫你執行某個命令,就將該命令寫成script,並將該文件放置到/etc/cron.hourly/目錄下即可
  5. 可喚醒停機期間的工作任務
    • 如果Linux主機是24小時全天,全年無休的服務器,那麼你只要ad與crond這兩個服務來管理例行工作即可,但是如果你的服務器並非24小時不關機,那麼就需要用anacron。
      anacron不是用來指定何時執行任務的,而是以天爲單位或者是在開機之後立刻進行anacron的操作的,它會去檢測停機期間應該進行但是沒有進行的crontab任務,並將該任務執行一遍,然後anacron就會自動停止。anacron其實也是通過crontab來進行的,因此anacron運行的時間通常有兩個,一個是系統開機期間運行,一個是寫入crontab的調度中
    • anacron與/etc/anacrontab
      anacron其實是一個程序並非一個服務。基本上anacron的語法如下
      [root@www~]# anacron [-sfn] [job]
      [root@www~]# anacron -u [job]
      
      參數 含義
      -s 開始連續執行各項工作,會依據時間記錄文件的數據判斷是否進行
      -f 強制進行,而不去判斷時間記錄文件的時間戳
      -n 立刻進行未進行的任務,而不延遲等待時間
      -u 僅更新時間記錄文件的時間戳,不進行任何工作
      job 由/etc/anacrontab定義的各項工作名稱
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章