linux作業管理和任務計劃

一、作業管理

Linux 的作業控制
    前臺作業:通過終端啟動,且啟動后一直占據終端;
    后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
如何讓作業運行于后臺?
(1)  運行中的作業: Ctrl+z
(2)  尚未啟動的作業:# COMMAND &后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望送往后臺后,剝離與終端的關系    # nohup COMMAND &    
    # screen;COMMAND查看所有作業:    # jobs
作業控制:
# fg [[%]JOB_NUM] :把指定的后臺作業調回前臺;# bg [[%]JOB_NUM] :讓送往后臺的作業在后臺繼續運行;# kill [%JOB_NUM] :終止指定的作業;

image

并行運行

同時運行多個進程,提高效率vi all.shf1.sh&
f2.sh&
f3.sh&
(f1.sh&);(f2.sh&);(f3.sh&)
# (echo 1&);(echo 2&);(echo 3&)
{ f1.sh& f2.sh& f3.sh& }

二、任務計劃

Linux 任務計劃、周期性任務執行
?  未來的某時間點執行一次任務:    at
    batch :系統自行選擇空閑時間去執行此處指定的任務(可執行腳本)
?  周期性運行某任務:
    cron

at 任務

安裝并啟動at任務
# yum install -y at# runleve    查看系統服務等級# chkconfig --list atd   # chkconfig --level 3 atd on  啟動服務#  ntsysv   GUI服務管理#  setup    GUI服務管理
at 命令:at [option] TIME
常用選項:
-V  顯示版本信息:    -l:  列出指定隊列中等待運行的作業;相當于atq    -d: 刪除指定的作業;相當于atrm    -c:  查看具體作業任務    -f /path/from/somefile :從指定的文件中讀取任務    -m: 當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出    -q QUEUE:指明隊列注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶
TIME: 定義出什么時候進行at這項任務的時間
HH:MM [YYYY-mm-dd]
noon, midnight, teatime (4pm)
tomorrownow+#{minutes,hours,days, OR weeks}
ctrl + d ;保存任務退出
at 時間格式
HH:MM 02:00在今日的HH:MM進行,若該時刻已過,則明天此時執行任務
HH:MM YYYY-MM-DD
04:00 2016-09-20
   規定在某年某月的某一天的特殊時刻進行該項任務
HH:MM[am|pm] [Month] [Date]
04pm March 1717:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
在某個時間點再加幾個時間后才進行該項任務
    now + 5 minutes    04pm + 3 days

at 任務

執行方式:1)交互式 
2)輸入重定向 
3)at –f 文件
     
依賴與atd服務,需要啟動才能實現at任務
at隊列存放在/var/spool/at 目錄中
通過/etc/at.{allow,deny}控制用戶是否能執行at 任務
先尋找/etc/at.allow文件,文件 中的使用者才能使用at,沒有在這個文件中的使用者則不能使用at(即使沒有寫在at.deny當中)
         
如果/etc/at.allow不存在,就尋找/etc/at.deny這個文件,若寫在這個at.deny用的使用者則不能使用 at ,而沒有在這個at.deny文件中的使用者則可使用at命令。
       
如果兩個文件都不存在有,只有 root 用可以使用at這個命令。
touch /etc/at.allow
/etc/at.allowlvasu tom

周期性任務計劃cron

相關的程序包:cronie:主程序包,提供crond守護進程及相關輔助工具
cronie-anacron:cronie 的補充程序;用于監控cronie任務執行狀況;如cronie中的任務在過去該運行的時間點未能正常運行,則anacron 會隨后啟動一次此任務
    
crontabs:包含CentOS提供系統維護任務

計劃任務

確保crond 守護處于運行狀態:
    CentOS 7:
        systemctl status crond
    CentOS 6:
        service crond status
計劃周期性執行的任務提交給crond,到指定時間會自動運行。他需要使用專用的配置文件,此文件有固定的格式,不建議使用文本編輯器直接編輯此文件;要使用crontab命令。
            
系統cron 任務:系統維護作業
    /etc/crontab
用戶cron 任務:
    crontab 命令
日志:/var/log/cron
系統cron 任務:/etc/crontab
注釋行以 # 開頭詳情參見 man 5 crontab
系統CRON的配置格式:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/   
    # 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!"
 注意:
    (1)每一行定義一個周期性任務:
     *  *  *  *  * :定義周期性時間
     user-name :要運行任務的用戶身份
     command to be executed:任務
    (2)此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量
    (3)執行結果郵件發送MAILTO指定的用戶
用戶CRON的配置格式:/var/spool/USERNAME
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root       
    # 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    # | | | | |
    # * * * * * command to be executed
    注意:
    (1)每一行定義一個corn任務,共6個字段
    (2)此處的環境變量不同于用戶登錄后獲得的環境,因此,建議命令使用絕對路徑,或者自定義PATH環境變量
    (3)執行結果郵件發送當前用戶

計劃任務

時間表示法:
(1)  特定值;
     給定時間點有效取值范圍內的值
     注意:day of week 和 day of month 一般不混合使用 
     執行結果是或的關系
(2) *
     給定時間點上有效取值范圍內的所有值
     表示“每...”     3****:每小時任務,每小時的第三分鐘     34**5:每周執行一次,每周5的4點3分     567**:每月執行一次,每月的7號6時5分     78910*:每年執行一次,每年的10月9號8時7分
(3)  離散取值:     #,#,#
     在時間點上使用逗號分隔的多個值      98**3,7:每周三和周日8時9分      18,20**3,7:沒周三和周日的8時和20時
(4)  連續取值:-     #-#
     09-18**1-5
             (5)  在指定時間范圍上,定義步長:
    /#: # 即為步長
    注意:
    (1)指定的時間點不能被步長整除時,其意義將不復存在
    (2)最小時間單位為分鐘,想完成秒級任務,需要額外借助其他幾只
       定義沒分鐘任務:利用腳本實現在沒分組之內,循環執行多次
    
    例如:每3小時echo 命令;     0 */3 * * * centos /bin/echo "howdy!"  
    */5****:每五分鐘執行一次某任務

時間格式

@reboot Run once after reboot.@yearly 0 0 1 1 *@annually 0 0 1 1 *@monthly 0 0 1 * *@weekly 0 0 * * 0@daily 0 0 * * *@hourly 0 * * * *

計劃任務

?  系統的計劃任務:/etc/crontab/etc/cron.d/ 配置文件/etc/cron.hourly/  腳本/etc/cron.daily/   腳本/etc/cron.weekly/  腳本/etc/cron.monthly/ 腳本

anacron 系統

運行計算機關機時cron不運行的任務,CentOS6.0 以后版本取消anacron服務,由crond服務管理。
假設計算機沒有一直開機
對筆記本電腦、臺式機、工作站及其它不一直開機的系統很重要
對偶爾要關機的服務器很有用
配置文件:/etc/anacrontab,負責執行/etc/cron.daily /etc/cron.weekly /etc/cron.monthly中系統任務。         /etc/cron.hourly/ 由/cron.d/0hourly 執行
    ?  字段1 :如果在這些時間里沒有運行這些任務……
    ?  字段2 :在重新引導后等待這么多分鐘后運行它
    ?  字段3 :任務識別器,在日志文件中標識
    ?  字段4 :要執行的任務
    ?  當執行任務時,更新/var/spool/anacron/ 文件時間戳

image

管理臨時文件

rhel6.0使用/etc/cron.daily/tmpwatch定時清除臨時文件。
rhel7.0 使用systemd-tmpfiles-setup 服務實現
配置文件:
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles/*.conf
          /usr/lib/tmpfiles.d/tmp.conf
  d /tmp 1777 root root 10d
  d /var/tmp 1777 root root 30d
命令:
systemd-tmpfiles –clean|remove|create configfile

計劃任務

用戶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}
lvasu

at 和crontab

用一次性作業使用 at
重復性作業使用crontab         
Create     at time      crontab -eList       at -l        crontab -lDetails    at -c jobnum    N/A
Remove     at -d jobnum crontab -r
Edit        N/A         crontab -e沒有被重定向的輸出會被郵寄給用戶
根用戶能夠修改其它用戶的作業

計劃任務

注意:運行結果的標準輸出和錯誤以郵件通知給相關用戶
    (1) COMMAND > /dev/null
    (2) COMMAND &> /dev/null對于cron任務來講,%有特殊用途;如果在命令中要使用%, 則需要轉義;不過,如果把%放置于單引號中,也可以不用轉義

計劃任務

思考:
(1) 如何在秒級別運行任務?
  * * * * * for min in 0 1 2; do echo "hi"; sleep 20;done
(2)  如何實現每7 分鐘運行一次任務?
sleep 命令
sleep NUMBER[SUFFIX]...
    SUFFIX:
        s: 秒, 默認        m: 分 
        h: 小時        d: 天

積累應用

1、每周2, 4, 7 備份/var/log/messages 文件至/logs目錄中,文件名形如“messages-yyyymmdd”
   
/etc/crontab0 

0** 2,4,7   tar cf /logs/messages-`date +%Y%m%d` /var/log/messages


2 、每兩小時取出當前系統/proc/meminfo 文件中以S或M開頭的信息追加至/tmp/meminfo.txt 文件中
     
crontab -e 
   
5 */2 ***   grep '^[SM].*' /proc/meminfo >> /tmp/meminfo.txt

原創文章,作者:lvasu,如若轉載,請注明出處:http://www.www58058.com/45909

(0)
lvasulvasu
上一篇 2016-09-13 11:17
下一篇 2016-09-13 11:17

相關推薦

  • 馬哥教育網絡班22期-第九周課程作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # declare -i count=0 declare -i bash_num=0 declare -i&nbs…

    Linux干貨 2016-11-21
  • Linux磁盤管理(一)之分區、格式化、掛載使用

    磁盤管理(一)   本章節內容: 磁盤結構 分區類型   管理分區   管理文件系統   掛載設備   一、磁盤結構: 1、設備號碼:  主設備號:major number, 標識設備類型 次設備號:minor number, 標識同一類型下的不同設備  &n…

    Linux干貨 2016-08-26
  • Linux終端類型

      2016-10-16  19:29:36  Linux終端類型   基本概念:  Linux終端其實就是用戶與操作系統之間的一個接口,用戶通過終端與操作系統進行交互。 在Linux系統終端包括以下幾種: 1、控制臺終端(Terminal)它的文件路徑(/dev/console) (物理終端直接連接鍵盤和鼠…

    Linux干貨 2016-10-17
  • 始于此

         “路漫漫其修遠兮,吾將上下而求索”,一段路程的結束,意味著一段路程的開始,同歲月般,永遠也不能回到出發的那一刻,你所能做的,就是一路走下去。回顧珍惜,卻不能逗留。         我的學習宣言是“功崇惟志,業廣惟勤”,時刻告訴自己,“功”出…

    Linux干貨 2016-11-28
  • 第一周-2:Linux部分常用命令使用示例、查看命令行工具使用手冊以及LinuxFHS部分目錄簡介

    一、部分命令使用示例: 1、ifconfg 在命令行界面下或系統配置腳本中用于配置、控制及查詢TCP/IP網絡接口的系統管理工具 [netartisan@localhost 桌面]$ ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 &n…

    Linux干貨 2016-11-07
  • LINUX下的RPM應用

    一 前言 在進入RPM的應用前,關于可執行程序的一些基本知識有必要說明一下: 1 ABI:application binary interface,這是應用程序與系統間的協議,大家都知道同一個程序在不同的操作系統平臺可能會無法執行,很大程度上就是因為ABI的不同,因此,對于可執行程序,選擇對應操作系統平臺是第一步 2 API:application prog…

    Linux干貨 2017-04-17

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-14 14:28

    圖片有些無法正常顯示,

欧美性久久久久