進程及任務管理

進程概念

內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
Process: 運行中的程序的一個副本,是被載入內存的一個指令集合
    進程ID(Process ID,PID)號碼被用來標記各個進程
    UID、GID、和SELinux語境決定對文件系統的存取和訪問權限,
    通常從執行進程的用戶來繼承
    存在生命周期
task struct:Linux內核存儲進程信息的數據結構格式
task list:多個任務的的task struct組成的鏈表
進程創建:
    init:第一個進程
        父子關系
    進程:都由其父進程創建,COW
        fork(), clone()

進程優先級
    系統優先級:數字越小,優先級越高
        0-139(CentOS4,5)
            各有140個運行隊列和過期隊列

        0------97--98--99(CenOS6)

    實時優先級:99-0:值最大優先級最高
    Nice值:-20,19對應系統優先級100-139或99

    top命令
        RT---------------RT--0------20------39
        RT對應系統優先級的0-99


    cenos6
    系統優先級 0------------------97--98--99------------------99
    實時優先級 99-------------------2---1--0
    nice優先級                             -20 --- -19 ---0-----20

            注:nice優先級,調的是對應系統優先級的99-99,效果不明顯。
    top命令
            RT-- -99 ------- -3 -2 0------20------39
                注:0左面的是負數

Big O:時間復雜度,用時和規模的關系
    O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)

進程相關概念

進程內存:
    Page Frame: 頁框,用存儲頁面數據,存儲Page 4k
    LRU:Least Recently Used 近期最少使用算法,釋放內存
    物理地址空間和線性地址空間
    MMU:Memory Management Unit負責轉換線性和物理地址
IPC: Inter Process Communication
    同一主機上
        signal
        shm: shared memory
        semophore信號量,一種計數器
    不同主機上:
        rpc: remote procedure call
        socket: IP和端口號

進程狀態
    Linux內核:搶占式多任務(優先級高的,分配的cpu時間片多一點)
    進程類型:
        守護進程: daemon,在系統引導過程中啟動的進程,和終端無關進程
        前臺進程:跟終端相關,通過終端啟動的進程
        注意:兩者可相互轉化
    進程狀態:
        運行態:running
        就緒態:ready
        睡眠態:
            可中斷:interruptable
            不可中斷:uninterruptable 例如cat一個很大的文件,cat程序需要等待io。
        停止態:stopped,暫停于內存中,但不會被調度,除非手動啟動 例如vim打開后
        僵死態:zombie,結束進程,父進程結束前,子進程不關閉

系統管理工具

進程的分類:
    CPU-Bound:CPU密集型,非交互  (計算型)
    IO-Bound:IO密集型,交互        (dd命令)
Linux系統狀態的查看及管理工具:pstree, ps, pidof, pgrep, top, htop,     glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
pstree命令:
    pstree-display a tree of processes
    -p 顯示進程樹進程的pid

ps

ps: process state
    ps-report a snapshot of the current processes
    Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中
    什么參數也跟,默認顯示,當前終端的進程。

    [root@centos7 ~]# ps
     PID TTY          TIME CMD
     10277 pts/1    00:00:01 bash
     11392 pts/1    00:00:00 ps

適用ps來查看進程信息
ps[OPTION]...
支持三種選項:
    UNIX選項如-a
    BSD選項如a
    GUN選項如--help
        ?默認顯示當前終端中的進程
        ?a選項包括所有終端中的進程
        ?x選項包括不鏈接終端的進程,沒有與終端關聯的進程。
        ?u選項顯示進程所有者的信息
        ?f選項顯示進程的父進程
        ?o屬性… 選項顯示定制的信息:
            pid、comm、%cpu、%mem、state、tty、euser、ruser

ps aux

USER PID %CPU %MEM   VSZ  RSS TTY  STAT START  TIME COMMAND

VSZ: Virtual memory SiZe,虛擬內存集,線性內存
RSS: ReSidentSize, 常駐內存集
STAT:進程狀態
    R:running
    S: interruptables leeping    可中斷的
    D: uninterruptable sleeping  不可中斷的
    T: stopped
    Z: zombie
    +: 前臺進程
    l: 多線程進程
    N:低優先級進程
    <: 高優先級進程
    s: session leader,會話(子進程)發起者
TIME:該進程累計占用cpu的時間


常用組合:-ef
    -e: 顯示所有進程
    -f: 顯示完整格式程序信息
常用組合:-eFH
    -F: 顯示更完整格式的進程信息
    -H: 以進程層級格式顯示進程相關信息

常用組合:自定義
    -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
    axo stat,euid(有效uid),ruid(真實uid),tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

    auxf :進程的父進程也顯示出來

        ni: nice值
        pri: priority,系統優先級
        rtprio: 實時優先級

        psr: processor, CPU編號

[root@localhost yum.repos.d]# ps ax o pid,ni
   PID  NI
     1   0
     2   0
     3   0
     7   -
     8   0

常用選項

 ps aux
ps auxf
ps auxfo euid ruid ...
    ps axo pid,comm,%cpu,nice

[root@localhost yum.repos.d]# ps axo pid,comm,%cpu,nice
   PID COMMAND         %CPU  NI
     1 systemd          0.0   0
     2 kthreadd         0.0   0
     3 ksoftirqd/0      0.0   0
     7 migration/0      0.0   -
     8 rcu_bh           0.0   0
     9 rcuob/0          0.0   0
    10 rcuob/1          0.0   0
注:o后面必須跟 想要顯示的選項。

ps -ef
ps -eFH

ps搜索
最靈活:ps選項| 其它命令 借助于管道

pgrep/pkill

進程搜索
按預定義的模式:pgrep
pgrep[options] patter
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示父進程為此處指定的進程的進程列表
pgrep -t pts/0 l
顯示pts/0終端運行的進程, l 顯示進程名稱
pgrep -t pts/0 -a
顯示的更詳細,命令的參數都顯示出來。

    pgrep -P 24944 -a
    24979 passwd
    顯示24944的子進程,pid是24979 名稱 passwd

pidof
/sbin/pidof
按確切的程序名稱:

$ pidof bash
顯示系統中運行的bash進程。例如開其了多個終端,就會有多個進程。

系統工具

uptime
    顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(1、5、15分鐘的平均負載,一般不會超過1)
    系統平均負載:
    指在特定時間間隔內運行隊列中的平均進程數。
    如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題。
    如果linux主機是1個雙核CPU的話,當Load Average 為6的時候說明機器已經被充分使用了。

[root@localhost]# uptime -p
up 6 hours, 48 minutes

進程管理工具

top
實時跟蹤,動態先顯示內存cpu情況

top - 23:53:18 up  7:33,  3 users,  load average: 0.05, 0.06, 0.06             ##相當于uptime
Tasks: 364 total,   2 running, 362 sleeping,   0 stopped,   0 zombie        ##進程信息
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st###cpu信息
KiB Mem :  1001332 total,   113420 free,   168424 used,   719488 buff/cache        ##內存信息
KiB Swap:  2098172 total,  2098172 free,        0 used.   611316 avail Mem         ##內存信息

上面的信息可以關閉顯示。

top:有許多內置命令:
    排序:
        P:以占據的CPU百分比,%CPU
        M:占據內存百分比,%MEM
        T:累積占據CPU時長,TIME+
        首部信息顯示:
    uptime信息:l命令
    tasks及cpu信息:t命令 centos7切換顯示方式或關閉。
    cpu分別顯示:1 (數字)
    memory信息:m命令
    退出命令:q
    修改刷新時間間隔:s 默認是三秒  不建議刷新間隔太小,會給系統改造成負擔
    終止指定進程:k 
        centos7會給出個默認的pid cup使用率最高的??梢允謩又付╬id
        選擇pid 然后 Kill PID 1684 with signal [15]:默認發送15號信號。
    保存文件:W
        存到用戶的家目錄下 默認名字 .toprc

執行top后 輸入上面相應指令集可以操作。

欄位信息簡介
    us:用戶空間
    sy:內核空間
    ni:調整nice時間
    id:空閑
    wa:等待IO時間
    hi:硬中斷
    si:軟中斷(模式切換)
    st:虛擬機偷走的時間
    PID (Process Id):任務的進程IDPPID (Parent Process Pid):父任務的進程IDRUSER (Real User Name):任務的所有者真實名稱UID (User Id):任務所有者IDUSER (User Name):任務所有者名稱GROUP (Group Name):任務所有者群組名TTY (Controlling Tty):終端PR (Priority):優先級%CPU (CPU usage):CPU使用率
    %MEM (Memory usage (RES)):內存使用率
    S (Process Status):進程狀態
    TIME+ (CPU Time, hundredths):CPU時間,精確到秒

top [OPENTION]
    -d #: 指定刷新時間間隔,默認為3秒
    -b: 以批次方式 一般情況屏幕顯示不全,-b 一屏的往下翻,循環。
    -n #: 顯示多少批次 刷新次數完畢退出,默認是一直刷新,但是時間間隔可以指定-d。
    -p cpu使用率排序 (默認)

top -d 5 -n 3
    每隔5秒刷新一次,刷新3次

htop命令:需從Fedora-EPEL源安裝

默認帶菜單,帶顏色。f1-f10快捷鍵

http://172.16.0.1/fedora-epel/7/x86_64
選項:
    -d #: 指定延遲時間;
    -u UserName: 僅顯示指定用戶的進程;
    -s COLUME: 以指定字段進行排序;

子命令:執行htop以后執行的子命令
    s: 跟蹤選定進程的系統調用;
    l: 顯示選定進程打開的文件列表;
    a:將選定的進程綁定至某指定CPU核心;
    t: 顯示進程樹

內存工具

vmstat命令:虛擬內存信息
    vmstat[options] [delay [count]]
    vmstat 2 5
        2秒刷新一次,刷新5次

默認刷新一次
[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0      8 126136   1596 711028    0    0    13    16   37   40  0  0 99  0  0
顯示完畢就退出

顯示內容

    procs:
        r:等待運行的進程的個數,和核心數有關
        b:處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度)
    memory:
        swpd: 交換內存的使用總量
        free:空閑物理內存總量
        buffer:用于buffer的內存總量
        cache:用于cache的內存總量
    swap:
        si:從磁盤交換進內存的數據速率(kb/s)
        so:從內存交換至磁盤的數據速率(kb/s)
    io:
        bi:從塊設備讀入數據到系統的速率;(kb/s)
        bo: 保存數據至塊設備的速率;
    system:
        in: interrupts, 中斷速率,包括時鐘
        cs: context switch, 進程切換速率
    cpu:
        us:Timespent running non-kernel code.
        sy: Time spent running kernel code
        id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
        wa: Time spent waiting for IO. 2.5.41前,包括in idle.
        st: Time stolen from a virtual machine. 2.6.11前, unknown.
選項:
    -s: 顯示內存的統計數據

    [root@localhost ~]# vmstat -s
          1001332 K total memory
           162076 K used memory
           316484 K active memory
           236640 K inactive memory
           126664 K free memory
             1596 K buffer memory
           710996 K swap cache
          2098172 K total swap
                8 K used swap
          2098164 K free swap
             4521 non-nice user cpu ticks
              695 nice user cpu ticks
            10009 system cpu ticks
          2950649 idle cpu ticks
             3636 IO-wait cpu ticks
                0 IRQ cpu ticks
              160 softirq cpu ticks
                0 stolen cpu ticks
           371505 pages paged in
           458693 pages paged out
                0 pages swapped in
                2 pages swapped out
          1086138 interrupts
          1188701 CPU context switches
       1471940397 boot time
            47448 forks

pmap

pmap命令:進程的內存映射
report memory map of a process
pmap[options] pid[...]
    -x: 顯示詳細格式的信息;
    #pmap 1
另外一種實現:
    # cat /proc/PID/maps

    pmap PID -x
    [root@localhost ~]# pmap 47188 -x
    47188:   -bash
    Address           Kbytes     RSS   Dirty Mode  Mapping
    0000000000400000     884     648       0 r-x-- bash
    00000000006dc000       4       4       4 r---- bash
    00000000006dd000      36      36      36 rw--- bash
    00000000006e6000      24      24      24 rw---   [ anon ]
    0000000001f1b000    1456    1328    1328 rw---   [ anon ]
    00007f1d2f25f000  103580      52       0 r---- locale-archive
    00007f1d35786000      44      20       0 r-x-- libnss_files-2.17.so
    00007f1d35791000    2044       0       0 ----- libnss_files-2.17.so
    00007f1d35990000       4       4       4 r---- libnss_files-2.17.so
    00007f1d35991000       4       4       4 rw--- libnss_files-2.17.so
    00007f1d35992000      24       0       0 rw---   [ anon ]
    00007f1d35998000    1752     660       0 r-x-- libc-2.17.so
    00007f1d35b4e000    2048       0       0 ----- libc-2.17.so
    00007f1d35d4e000      16      16      16 r---- libc-2.17.so
    00007f1d35d52000       8       8       8 rw--- libc-2.17.so
    00007f1d35d54000      20      20      20 rw---   [ anon ]
    00007f1d35d59000      12       8       0 r-x-- libdl-2.17.so
    00007f1d35d5c000    2044       0       0 ----- libdl-2.17.so
    00007f1d35f5b000       4       4       4 r---- libdl-2.17.so
    00007f1d35f5c000       4       4       4 rw--- libdl-2.17.so
    00007f1d35f5d000     148     124       0 r-x-- libtinfo.so.5.9
    00007f1d35f82000    2048       0       0 ----- libtinfo.so.5.9
    00007f1d36182000      16      16      16 r---- libtinfo.so.5.9
    00007f1d36186000       4       4       4 rw--- libtinfo.so.5.9
    00007f1d36187000     132     116       0 r-x-- ld-2.17.so
    00007f1d3638f000      12      12      12 rw---   [ anon ]
    00007f1d3639e000       4       4       4 rw---   [ anon ]
    00007f1d3639f000      28      24       0 r--s- gconv-modules.cache
    00007f1d363a6000       8       8       8 rw---   [ anon ]
    00007f1d363a8000       4       4       4 r---- ld-2.17.so
    00007f1d363a9000       4       4       4 rw--- ld-2.17.so
    00007f1d363aa000       4       4       4 rw---   [ anon ]
    00007fff60224000     132      24      24 rw---   [ stack ]
    00007fff602a7000       8       4       0 r-x--   [ anon ]
    ffffffffff600000       4       0       0 r-x--   [ anon ]
    ---------------- ------- ------- ------- 
    total kB          116596    3188    1532

系統監控工具

glances

glances命令:EPEL源
交直觀的現實系統狀態,cpu 內存 進程 文件系統 網絡 等狀態
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
內建命令:
    a Sort processes automatically l Show/hide logs
    c Sort processes by CPU% b Bytes or bits for network I/O
    m Sort processes by MEM% w Delete warning logs
    p Sort processes by name x Delete warning and critical logs
    iSort processes by I/O rate 1 Global CPU or per-CPU stats
    d Show/hide disk I/O stats h Show/hide this help screen
    f Show/hide file system stats t View network I/O as combination
    n Show/hide network stats u View cumulative network I/O
    s Show/hide sensors stats q Quit (Esc and Ctrl-C also work)
    y Show/hide hddtempstats


常用選項:
    -b: 以Byte為單位顯示網卡數據速率
    -d: 關閉磁盤I/O模塊
    -f /path/to/somefile: 設定輸入文件位置
    -o {HTML|CSV}:輸出格式
    -m: 禁用mount模塊
    -n: 禁用網絡模塊
    -t #: 延遲時間間隔
    -1:每個CPU的相關數據單獨顯示

C/S模式下運行glances命令
服務模式:
    glances -s -B IPADDR
    IPADDR: 指明監聽的本機哪個地址
客戶端模式:
    glances -c IPADDR
    IPADDR:要連入的服務器端地址

dstat

dstat命令:系統資源統計
dstat[-afv] [options..] [delay [count]]
    -c: 顯示cpu相關信息
    -C #,#,...,total
    -d: 顯示disk相關信息
    -D total,sda,sdb,...
    -g:顯示page相關統計數據
    -m: 顯示memory相關統計數據
    -n: 顯示network相關統計數據
    -p: 顯示process相關統計數據
    -r: 顯示io請求相關的統計數據
    -s: 顯示swapped相關的統計數據

--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu:顯示最占用CPU的進程
--top-io: 顯示最占用io的進程
--top-mem: 顯示最占用內存的進程
--top-latency: 顯示延遲最大的進程


   PLUGINS
   While anyone can create their own dstat plugins (and contribute them) dstat ships with a number of plugins already that extend its capabilities greatly.
   Here is an overview of the plugins dstat ships with:
    電源 風扇 mysql wifi 報文 網絡 磁盤 cpu........

進程管理工具

kill

kill命令:
    向進程發送控制信號,以實現對進程管理
    顯示當前系統可用信號:kill -l
    常用信號:man 7 signal
        1) SIGHUP: 無須關閉進程而讓其重讀配置文件
        2) SIGINT: 中止正在運行的進程;相當于Ctrl+c
        9) SIGKILL: 殺死正在運行的進程
        15) SIGTERM:終止正在運行的進程
        18) SIGCONT:
        19) SIGSTOP:
    指定信號的方法:
        (1) 信號的數字標識;1, 2, 9
        (2) 信號完整名稱;SIGHUP
        (3) 信號的簡寫名稱;HUP

    按PID:kill [-SIGNAL] pid…
    按名稱:killall[-SIGNAL] comm…
    按模式:pkill[options] pattern
        -SIGNAL
        -u uid: effective user,生效者
        -U uid: real user,真正發起運行命令者
        -t terminal: 與指定終端相關的進程
        -l: 顯示進程名
        -a: 顯示完整格式的進程名
        -P pid: 顯示父進程為此處指定的進程的進程列表

作業管理

Linux的作業控制
前臺作業:通過終端啟動,且啟動后一直占據終端;
后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
如何讓作業運行于后臺?
(1) 運行中的作業:Ctrl+z
(2) 尚未啟動的作業:# COMMAND &
此類后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望送往后臺后,剝離與終端的關系:

# nohup COMMAND &

查看所有作業:

# jobs

作業控制:

# fg[[%]JOB_NUM]:把指定的后臺作業調回前臺;
# bg[[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行;
# kill [%JOB_NUM]:終止指定的作業;

并行運行
vi f4.sh
F1.sh&
F2.sh&
F3.sh&

( (f1.sh&);(f2.sh&);(f3.sh&))

{ f1.sh& f2.sh& f3.sh& }

進程優先級

進程優先級調整:
    靜態優先級:100-139
    進程默認啟動時的nice值為0,優先級為120
    只有根用戶才能降低nice值(提高優先性


nice命令:
nice [OPTION] [COMMAND [ARG]…]

renice命令:
    renice[-n] priority pid...

查看:
    ps axo pid,comm,ni

任務計劃

Linux任務計劃、周期性任務執行
未來的某時間點執行一次任務:at, batch
周期性運行某任務: cron

at命令

at命令:
    at [option] TIME

    TIME: ##時間點
        HH:MM [YYYY-mm-dd]
        noon, midnight, teatime
        tomorrow
        now+#{minutes,hours,days, OR weeks}

常用選項:
-q QUEUE:
-l: 列出指定隊列中等待運行的作業;相當于atq
-d: 刪除指定的作業;相當于atrm
-c: 查看具體作業任務
-f /path/from/somefile:從指定的文件中讀取任務
-m:強制at發送郵件,表示執行完畢

/var/spool/at at任務的任務列表即使重啟主機后,也不會丟失任務
at是以服務形式在系統中工作 /etc/rc.d/init.d/atd 首先要保證服務已經正常運行。

root@localhost ~]# systemctl status atd  ###centos7
[root@yangyouwei ~]# service atd status  ###centos6
atd (pid  7182) is running...

如果atd服務沒有啟動

[root@yangyouwei ~]# at now +1minutes
at> ls
at> echo "hello word"  
at> <EOT>
job 1 at 2016-07-21 18:19
Can't open /var/run/atd.pid to signal atd. No atd running?

at.deny 默認為空,黑名單
at.allow 沒人沒有此文件,白名單

   The superuser may use these commands in any  case.   For  other  users,
   permission  to  use  at  is  determined  by the files /etc/at.allow and
   /etc/at.deny. ##控制普通用戶使用at命令,通過兩個文件控制,at.allow/at.deny

   If the file /etc/at.allow exists, only usernames mentioned  in  it  are
   allowed to use at.##r如果at.allow文件存在,則只有在其中的用戶才能使用at命令

   If  /etc/at.allow  does not exist, /etc/at.deny is checked, every user-
   name not mentioned in it is then allowed to use at.如果不存在白名單,其他用戶又不在黑名單中,
    則可以使用at命令

   If neither exists, only the superuser is allowed use of at.
    如果兩個文件都不存在則僅管理員可硬使用at

   An empty /etc/at.deny means that every user is allowed use  these  com-
   mands, this is the default configuration.
    默認黑名單為空,所有用戶都可以使用at命令。

at and batch read commands from standard input or a specified file which are to be executed at a later time, using /bin/sh.
at和batch通過標準輸入或文件獲取要執行的命令,使用/bin/sh在指定的時間運行它們。

手動執行
[root@yangyouwei ~]# at now +1minutes
at> cd /
at> ###ctrl+d
job 3 at 2016-07-21 18:24
[root@yangyouwei ~]# at -l
6 2016-07-21 18:36 a root ###前面的數字為任務號

[root@yangyouwei ~]# ls /var/spool/at/  ###生成任務后,會在/var/spool/at/目錄下生成任務文件。(腳本,其中定義了運行要執行任務需要的變量等..)
a0000601759c71 ##作業號加隨機數

at -c 5
查看任務相當cat /var/spool/at/a0000601759c71

通過文件獲取任務

at now +1min -f FILE -q
at now +min -q < /PATH/TO/FILE

注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶.編寫腳本時將標準輸出和標準錯誤輸出都重新定向到/dev/null

crond也一樣有標準輸出的都要重新定向到/etc/null,較長的任務,不建議使用at直接寫入,最好寫入腳本,使用at執行腳本。

at命令也支持 -f 通過文件獲取要執行的任務,用戶手動創建任務,可以使用標準輸入,手動輸入任務命令。

即使沒有標準輸出的任務,也可以強制給用戶郵件,提示用戶任務執行完畢。 at -m

如果指定時間,沒指定日期,時間小于當前時間。則任務默認第二天的那個時間運行。

普通用戶創建的任務,時間到期后,atd會使用普通用戶身份開啟shell,后運行任務。


計劃任務

batch命令:

讓系統自行選擇空閑時間去執行此處指定的任務

周期性任務計劃:cron

使用cron可以實現用戶人和系統任務
用戶任務需要用戶使用crontab命令自己添加。

相關的程序包:
    cronie: 主程序包,提供crond守護進程及相關輔助工具
    cronie-anacron:cronie的補充程序;用于監控cronie任務執行狀況;如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨后啟動一次此任務
        主要針對家用電腦,筆記本。服務器作用不大。
    crontabs:包含CentOS提供系統維護任務
        主要針對系統周期性服務的。

cronie
    [root@yangyouwei ~]# rpm -q cronie
    cronie-1.4.4-15.el6_7.1.x86_64
    [root@yangyouwei ~]# rpm -ql cronie
    /etc/cron.d
    /etc/cron.d/0hourly
    /etc/cron.deny
    /etc/pam.d/crond
    /etc/rc.d/init.d/crond
    /etc/sysconfig/crond
    /usr/bin/crontab
    /usr/sbin/crond
    /usr/share/doc/cronie-1.4.4
    /usr/share/doc/cronie-1.4.4/AUTHORS
    /usr/share/doc/cronie-1.4.4/COPYING
    /usr/share/doc/cronie-1.4.4/ChangeLog
    /usr/share/doc/cronie-1.4.4/INSTALL
    /usr/share/doc/cronie-1.4.4/README
    /usr/share/man/man1/crontab.1.gz
    /usr/share/man/man5/crontab.5.gz
    /usr/share/man/man8/cron.8.gz
    /usr/share/man/man8/crond.8.gz
    /var/spool/cron

cronie-anacron
    [root@yangyouwei ~]# rpm -q cronie-anacron
    cronie-anacron-1.4.4-15.el6_7.1.x86_64
    [root@yangyouwei ~]# rpm -lq cronie-anacron
    /etc/anacrontab
    /etc/cron.hourly/0anacron
    /usr/sbin/anacron
    /usr/share/man/man5/anacrontab.5.gz
    /usr/share/man/man8/anacron.8.gz
    /var/spool/anacron
    /var/spool/anacron/cron.daily
    /var/spool/anacron/cron.monthly
    /var/spool/anacron/cron.weekly

crontabs
    [root@yangyouwei ~]# rpm -q crontabs
    crontabs-1.10-33.el6.noarch
    [root@yangyouwei ~]# rpm -lq crontabs
    /etc/cron.daily
    /etc/cron.hourly
    /etc/cron.monthly
    /etc/cron.weekly
    /etc/crontab   ###系統周期性任務,普通用戶無權限更改。
    /usr/bin/run-parts
    /usr/share/man/man4/crontabs.4.gz

確保crond守護處于運行狀態:
    CentOS 7:
        systemctlstatus crond
        ...running...
    CentOS 6:
        service crondstatus

計劃周期性執行的任務提交給crond,到指定時間會自動運行
    系統cron任務:系統維護作業
        /etc/crontab  ###系統周期任務文件
    用戶cron任務:
        crontab命令

系統周期性任務

系統cron任務:/etc/crontab

    [root@yangyouwei ~]# cat /etc/crontab 
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin  ####路徑變量,用戶需要可自定義。
    MAILTO=root  ###完成任務或有標準輸出,給誰發郵件
    HOME=/      ###執行任務時的工作目錄

    # For details see man 4 crontabs

    # 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  ###user-name指的是命令以誰的身份執行的。

例如:晚上9點10分運行echo命令;
    10 21 * * *gentoo/bin/echo "Howdy!"

可以直接編輯此文件,添加系統周期任務任務。運行系統任務,會生成日志
/var/log/cron 用戶自己創建的任務

時間表示法:

(1) 特定值;
    給定時間點有效取值范圍內的值
(2) *
    給定時間點上有效取值范圍內的所有值
    表示“每...”
(3) 離散取值:
    #,#,#
(4) 連續取值:-
    #-#
(5) 在指定時間范圍上,定義步長:
    /#: #即為步長
例如:每3小時echo命令;
    0 */3 * * * gentoo/bin/echo "howdy!"

時間表示

@reboot : Run once after reboot.
@yearly : Run once a year, ie. "0 0 1 1 ".
@annually : Run once a year, ie. "0 0 1 1 
".
@monthly : Run once a month, ie. "0 0 1 ".
@weekly : Run once a week, ie. "0 0 0".
@daily : Run once a day, ie. "0 0 ".
@hourly : Run once an hour, ie. "0 
*".

@hourly user-name command to be executed

系統的計劃任務腳本

/etc/crontab  系統周期任務文件
/etc/cron.d/ 配置文件

/etc/cron.hourly/ 腳本
/etc/cron.daily/腳本
/etc/cron.weekly/腳本
/etc/cron.monthly/腳本

[root@yangyouwei ~]# ls /etc/cron.d  ###配置文件
0hourly  raid-check  sysstat
[root@yangyouwei ~]# cat /etc/cron.d/0hourly 
SHELL=/bin/bash                        ##使用那個shell運行腳本
PATH=/sbin:/bin:/usr/sbin:/usr/bin    ##路徑變量
MAILTO=root                            ##郵件發送給給root
HOME=/                                ##執行腳本時的工作目錄
01 * * * * root run-parts /etc/cron.hourly        ##每小時運行/etc/cron.hourly/目錄下的所有腳本
[root@yangyouwei ~]# ls /etc/cron.hourly/
0anacron
[root@yangyouwei ~]# cat /etc/cron.hourly/0anacron 
#!/bin/bash
# Skip excecution unless the date has changed from the previous run 
if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi

# Skip excecution unless AC powered
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power &> /dev/null
    if test $? -eq 1; then
    exit 0
    fi
fi
/usr/sbin/anacron -s

[root@yangyouwei ~]# which run-parts
/usr/bin/run-parts
是個命令,可以依次運行某個目錄下的所有腳本。不是并行運行所有腳本
run-parts /PATH/TO/ ##后接一個目錄即可。

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/文件時間戳

管理臨時文件

rhel7.0之前使用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命令實現

crontab命令定義,每個用戶都有專用的cron任務文件:/var/spool/cron/USERNAME
crontab命令:
    crontab[-u user] [-l | -r | -e] [-i]
    -l: 列出所有任務;
    -e: 編輯任務;
    -r: 移除所有任務;
    -i:同-r一同使用,以交互式模式移除指定任務
    -u user: 僅root可運行,指定用戶管理cron任務

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

crontab -e

* command to be executed ###不用寫user-name默認以當前創建用戶的身份執行。

[root@yangyouwei ~]# crontab -e
no crontab for root – using an empty one

    • wall hello
      ~
      ~
      ~
      ~
      ~
      "/tmp/crontab.4oxhQU" 1L, 21C written
      crontab: installing new crontab
      [root@yangyouwei ~]# ll /var/spool/cron/
      total 4
      -rw——-. 1 root root 21 Jul 21 22:32 root
      [root@yangyouwei ~]#

    注意:運行結果的標準輸出和錯誤以郵件通知給相關用戶
    (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、每4小時備份一次/etc目錄至/backup目錄中,保存的文件名稱格式為“etc-yyyy-mm-dd-HH.tar.xz”
    2、每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd”
    3、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
    4、工作日時間內,每小執行一次“ip addr show”命令

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

    (0)
    yywyyw
    上一篇 2016-09-09
    下一篇 2016-09-09

    相關推薦

    • httpd及https

      1、建立httpd服務,要求: (1) 提供兩個基于名稱的虛擬主機:     www1.stuX.com,頁面文件目錄為/web/vhosts/www1;錯誤日志為/var/log/httpd/www1/error_log,訪問日志為/var/log/httpd/www1/access_log;   &nbs…

      2017-06-05
    • linux開機啟動流程

      linux開機啟動流程:   一、BIOS 加電自檢 當你按電源開關開機時,電腦會首先去啟動BIOS(基本輸入輸出系統),BIOS一般是集成在主板上的. BIOS 的工作 1.檢測連接硬件,比如顯卡,內存,磁盤等等,檢測的目的是以后把這些設備信息提供給操作系統 2.尋找啟動磁盤,每一種BIOS都會有開機啟動菜…

      Linux干貨 2016-09-19
    • Linux Services and Security–part2

      一、請描述一次完整的http請求處理過程 (1).建立或處理連接:接收請求或拒絕請求; (2).接收請求:接收來自于網絡上的主機請求報文中對某特定資源的一次請求的過程; 接收請求的模型: 并發訪問響應模型: 單進程I/O模型:啟動一個進程處理用戶請求;這意味著,一次只能處理一個請求,多個請求被串行響應; 多進程I/O結構:并行啟動多個進程,每個進程響應一個請…

      Linux干貨 2017-11-13
    • shell 腳本中數組的總結

      描述:   變量是存儲單個元素的內存空間,而數組是多個變量的集合,是一個連續的空間;但整個數組只能有 的名字。   數組內的數據都有指定的索引,從而找到數組內所指定的數據。索引的編號是從0開始的,依次遞增(0,1,2,3,…),這種方式叫數值索引。格式為:數組名[索引];${ARRAY_NAME[INDEX]}。索引也支持自定…

      Linux干貨 2016-08-29
    • 基礎網絡配置

      配置文件: /etc/ude /proc/sys/net/ipv4/ip_forward /etc/sysconfig/network-scripts/ifcfg-IFACE 網絡配置文件 /etc/sysconfig/network-scripts/route-IFACE 路由配置文件 配置文件里的設置: DEVICE:此配置文件應用到的設備 HWADDR…

      Linux干貨 2017-05-08
    • Linux的基礎文件管理命令

      Linux用于管理文件的一些基本常見的命令如下: ls:  列出指定目錄下的清單    -a  顯示所有文件包括隱藏文件    -l  顯示文件的詳細信息    -d  查看目錄自身   示例: cat:  可查看指定路徑下的文件文本 fi…

      Linux干貨 2016-11-06

    評論列表(1條)

    • 馬哥教育
      馬哥教育 2016-09-10 11:05

      文章結構清晰,層次分明,贊一個哦。

    欧美性久久久久