1. 程式人生 > >進程和定時任務

進程和定時任務

雙核 cron tput 簡介 nth 傳輸 關系 prior tor

進程概念


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

進程創建:
        init:第一個進程
            父子關系
        進程:都由其父進程創建,Cow fork() ,cione()

進程的基本狀態


    創建狀態:進程在創建時需要申請一個空白PCB(process control block進程控 制塊),向其中填寫控制和管理進程的信息,完成資源分配。
     如果創建工作無法完 成,比如資源無法滿足,就無法被調度運行,把此時進程所處狀態稱為創建狀態
就緒狀態:進程已準備好,已分配到所需資源,只要分配到CPU就能夠立即運行
執行狀態:進程處於就緒狀態被調度後,進程進入執行狀態
阻塞狀態:正在執行的進程由於某些事件(I/O請求,申請緩存區失敗)而暫時
    無法運行,進程受到阻塞。在滿足請求時進入就緒狀態等待系統調用
終止狀態:進程結束,或出現錯誤,或被系統終止,進入終止狀態。無法再執行   

進程的基本狀態


創建狀態:進程在創建時需要申請一個空白PCB(process control block進程控 制塊),向其中填寫控制和管理進程的信息,完成資源分配。
如果創建工作無法完 成,比如資源無法滿足,就無法被調度運行,把此時進程所處狀態稱為創建狀態

就緒狀態:進程已準備好,已分配到所需資源,只要分配到CPU就能夠立即運行

執行狀態:進程處於就緒狀態被調度後,進程進入執行狀態

無法運行,進程受到阻塞。在滿足請求時進入就緒狀態等待系統調用

終止狀態:進程結束,或出現錯誤,或被系統終止,進入終止狀態。無法再執行   

狀態之間轉換六種情況


運行——>就緒:1,主要是進程占用CPU的時間過長,而系統分配給該進程占 用CPU的時間是有限的;2,在采用搶先式優先級調度算法的系統中,當有更高 優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變為 就緒狀態。

就緒——>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適 的進程分配CPU

運行——>阻塞:正在執行的進程因發生某等待事件而無法執行,則進程由執 行狀態變為阻塞狀態,如發生了I/O請求

阻塞——>就緒:進程所等待的事件已經發生,就進入就緒隊列

以下兩種狀態是不可能發生的: 
阻塞——>運行:即使給阻塞進程分配CPU,也無法執行,操作系統在進行調 度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態  

進程優先級


進程優先級: 
    系統優先級:數字越小,優先級越高  
    0-139(CentOS4,5)
    各有140個運行隊列和過期隊列  
    0-98,99(CentOS6)
    實時優先級: 99-0   值最大優先級最高 
    nice值:-20到19,對應系統優先級100-139或99
    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負責轉換線性和物理地址
TLB:Translation Lookaside Buffer 翻譯後備緩沖器,用於保存虛擬地址和物理地址 映射關系的緩存
 IPC: Inter Process Communication 
 同一主機: signal:信號
 shm: shared memory 
 semaphore:信號量,一種計數器 
 不同主機:socket: IP和端口號    
 RPC: remote procedure call
 MQ:消息隊列,Kafka,ActiveMQ   

進程狀態


Linux內核:搶占式做任務
進程類型:
        守護進程:daemon,再系統引導過程中啟動的進程,和終端無關進程
        前臺進程:跟終端相關,通過終端啟動的進程
        註意:兩者可以相互轉換
進程狀態:
        運行態:running
        就緒態:ready
        睡眠態:
                可中斷:interruptable
                不可中斷:uninterruptable
停止態:stopped,暫停於內存,但不會被天調度,除非手動啟動
僵死態:zombie,結束進程,父進程結束前子進程不關閉

系統管理工具


進程的分類:
CPU-Bound:CPU密集型,非交互  
IO-Bound:IO密集型,交互
Linux系統狀態的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
pstree命令: 
pstree - display a tree of processes 
ps: process state 
ps - report a snapshot of the current processes 
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中 

查看進程進程ps


ps
    支持三種選項:
        UNIX選項:如 -A  -e
        BSD選項: 如a
        GNU選項 :如--help
    選項:默認顯示當前終端的進程
        a 選項包括所有終端中的進程
        x 選項包括不鏈接終端的進程
        u 選項顯示進程所有者信息
        f 選項顯示進程樹,相當於 --forest
        k|--sort 屬性 對屬性排序,屬性前加- 表示倒序
        o 屬性... 選項顯示定制的信息 pid cmd %cpu %mem
        L 顯示支持的屬性列表

PS常見選項


-C cmdlist  指令命令,多個命令用 ,分割
-L 顯示進程
-e 顯示所有進程,相當於——A
-f 顯示完整格式程序信息
-F 顯示更完整的格式進程信息
-H 以進程層級格式顯示進程相關信息
-u userlist  指定有效的用戶ID或名稱
-U userlist 指定真正用戶ID或名稱
-g gid 或groupname 指定有效的gid或組名稱
-G gid或groupname 指定真正的gid 或組名稱
-p pid 顯示pid的進程
--ppid  pid 顯示屬於pid的子進程
-M 顯示SELinux信息,相當於Z 

PS輸出屬性


VSZ: Virtual memory SiZe,虛擬內存集,線性內存
 RSS: ReSident Size, 常駐內存集
 STAT:進程狀態 
 R:running 
 S: interruptable sleeping
 D: uninterruptablesleeping
 T: stopped 
 Z: zombie  
 +: 前臺進程  
 l: 多線程進程 
 L:內存分頁並帶鎖 
 N:低優先級進程  
 <: 高優先級進程  
 s: session leader,會話(子進程)發起者 

PS


ni: nice值 
pri: priority 優先級 
psr: processor  CPU編號
rtprio: 實時優先級 
示例:
ps axo pid,cmd,psr,ni,pri,rtprio
常用組合:
aux 
-ef
-eFH 
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm 
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm 

PS示例


ps示例

查詢你擁有的所有進程:
ps -x
顯示指定用戶名(RUID)或用戶ID的進程:
ps -fU apache ps -fu 48
顯示指定用戶名(EUID)或用戶ID的進程:
ps -fu wang ps -fu 1000
查看以root用戶權限(實際和有效ID)運行的每個進程:
ps -U root -u root
列出某個組擁有的所有進程(實際組ID:RGID或名稱):
ps -fG nginx 
列出有效組名稱(或會話)所擁有的所有進程: 
ps -fg mysql
ps -fG 27
通過進程ID來顯示所屬的進程:
ps -fp 1234
以父進程ID來顯示其下所有的進程,如顯示父進程為1154的所有進程:  
ps -f --ppid 1234
顯示指定PID的多個進程: 
ps -fp 1204,1239,1263
要按tty顯示所屬進程:
ps -ft pst/0 
以進程樹顯示系統中的進程如何相互鏈接:  
ps -e --forest
以進程樹顯示指定的進程 
ps -f --forest -C sshd 
ps -ef --forest | grep -v grep | grep sshd
要顯示一個進程的所有線程,將顯示LWP(輕量級進程)以及NLWP(輕量級進 程數)列:
ps -fL -C nginx
要列出所有格式說明符: 
ps L
查看進程的PID,PPID,用戶名和命令:  
ps -eo pid,ppid,user,cmd 
自定義格式顯示文件系統組,ni值  開始時間和進程的時間:
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
使用其PID查找進程名稱:
ps -p 1244 -o comm=
要以其名稱選擇特定進程,顯示其所有子進程 
ps -C sshd,bash
查找指定進程名所有的所屬PID,在編寫需要從std輸出或文件讀取PID的腳本時 這個參數很有用:
ps -C httpd,sshd -o pid=
檢查一個進程的執行時間 
ps -eo comm,etime,user | grep nginx
查找占用最多內存和CPU的進程: 
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
顯示安全信息:
ps -eM ps --context
使用以下命令以用戶定義的格式顯示安全信息。 
ps -eo euser,ruser,suser,fuser,f,comm,label
使用watch實用程序執行重復的輸出以實現對就程進行實時的監視,如下面的命 令顯示每秒鐘的監視
watch -n 1 ‘ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head‘

進程優先級


進程優先級調整:
    靜態優先級:100-139
    進程默認啟動時的nice值為0,優先級為120 
    只有根用戶才能降低nice值(提高優先性)
nice命令:
    nice [OPTION] [COMMAND [ARG]...] 
renice命令: 
    renice [-n] priority pid... 
查看: 
    ps axo pid,comm,ni 

搜索進程


最靈活:ps 選項 | 其它命令
按預定義的模式:pgrep 
    pgrep [options] pattern  
    -u uid: effective user,生效者 
    -U uid: real user,真正發起運行命令者 
    -t terminal: 與指定終端相關的進程 
    -l: 顯示進程名  
    -a: 顯示完整格式的進程名
    -P pid: 顯示指定進程的子進程
    按確切的程序名稱:/sbin/pidof  
    pidof bash 

系統工具


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

進程管理工具


top:有許多內置命令: 
排序:   
    P:以占據的CPU百分比,%CPU  
    M:占據內存百分比,%MEM
    T:累積占據CPU時長,TIME+
    首部信息顯示:  
    uptime信息:l命令 
    tasks及cpu信息:t命令
    cpu分別顯示:1 (數字)
    memory信息:m命令   
    退出命令:q 
    修改刷新時間間隔:s  
    終止指定進程:k 
    保存文件:W 

top命令 
欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閑
wa:等待IO時間 
hi:硬中斷 
si:軟中斷(模式切換)
st:虛擬機偷走的時間 

進程管理工具 

選項:  
-d #: 指定刷新時間間隔,默認為3秒    
-b: 全部顯示所有進程    
-n #: 刷新多少次後退出 
htop命令:EPEL源     
選項: 
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程 
-s COLUME: 以指定字段進行排序       子命令: 
s: 跟蹤選定進程的系統調用
l: 顯示選定進程打開的文件列表 
a:將選定的進程綁定至某指定CPU核心  t: 顯示進程樹

內存空間


內存空間使用狀態:
free [OPTION] 
    -b  以字節為單位 
    -m  以MB為單位  
    -g  以GB為單位
    -h  易讀格式
    -o  不顯示-/+buffers/cache行  
    -t   顯示RAM + swap的總和 
    -s  n  刷新間隔為n秒 
    -c  n  刷新n次後即退出   

內存工具


 vmstat命令:虛擬內存信息
 vmstat [options] [delay [count]] 
 vmstat 2 5 
  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:Time spent 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: 顯示內存的統計數據
iostat:統計CPU和設備IO信息
示例:iostat 1 10
pmap命令:進程對應的內存映射 
pmap [options] pid [...]
-x: 顯示詳細格式的信息  
示例:pmap 1 另外一種實現:  
cat /proc/PID/maps   

系統監控工具


glances命令:EPEL源 
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
i  Sort 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 hddtemp stats 

常用選項:
-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命令:系統資源統計,代替vmstat,iostat 
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: 顯示延遲最大的進程  

iotop


iotop命令是一個用來監視磁盤I/O使用狀況的top類工具iotop具有與top相似的UI,其 中包括PID、用戶、I/O、進程等相關信息,可查看每個進程是如何使用IO 
 iotop輸出
 第一行:Read和Write速率總計 
 第二行:實際的Read和Write速率
 第三行:參數如下:
 線程ID(按p切換為進程ID)
 優先級
 用戶
 磁盤讀速率 
 磁盤寫速率
 swap交換百分比
 IO等待所占的百分比
 線程/進程命令 

iotop常用參數 
-o, --only只顯示正在產生I/O的進程或線程,除了傳參,可以在運行過程中按o 生效
-b, --batch非交互模式,一般用來記錄日誌 
-n NUM, --iter=NUM設置監測的次數,默認無限。在非交互模式下很有用 
-d SEC, --delay=SEC設置每次監測的間隔,默認1秒,接受非×××數據例如1.1 
-p PID, --pid=PID指定監測的進程/線程 
-u USER, --user=USER指定監測某個用戶產生的I/O 
-P, --processes僅顯示進程,默認iotop顯示所有線程
-a, --accumulated顯示累積的I/O,而不是帶寬 
-k, --kilobytes使用kB單位,而不是對人友好的單位。在非交互模式下,腳本 編程有用 

iotop常用參數和快捷鍵 

-t, --time 加上時間戳,非交互非模式
-q, --quiet 禁止頭幾行,非交互模式,有三種指定方式 
    -q 只在第一次監測時顯示列名 
    -qq 永遠不顯示列名 
    -qqq 永遠不顯示I/O匯總 交互按鍵
    left和right方向鍵:改變排序
    r:反向排序
    o:切換至選項--only
    p:切換至--processes選項
    a:切換至--accumulated選項
    q:退出
    i:改變線程的優先級  

lsof


 Lsof:list open files查看當前系統文件的工具。在linux環境下,一切皆文件,用戶通 過文件不僅可以訪問常規數據,還可以訪問網絡連接和硬件如傳輸控制協議 (TCP) 和 用戶數據報協議 (UDP)套接字等,
系統在後臺都為該應用程序分配了一個文件描述符
     命令參數
     -a:列出打開文件存在的進程 
     -c<進程名>:列出指定進程所打開的文件
     -g:列出GID號進程詳情
     -d<文件號>:列出占用該文件號的進程
     +d<目錄>:列出目錄下被打開的文件
     +D<目錄>:遞歸列出目錄下被打開的文件
     -n<目錄>:列出使用NFS的文件 
     -i<條件>:列出符合條件的進程(4、6、協議、:端口、 @ip ) 
     -p<進程號>:列出指定進程號所打開的文件 
     -u:列出UID號進程詳情 
     -h:顯示幫助信息 
     -v:顯示版本信息。 

進程管理 
查看由登陸用戶啟動而非系統啟動的進程   
      lsof /dev/pts1 
指定進程號,可以查看該進程打開的文件  
     lsof -p 9527  
文件管理
        查看指定程序打開的文件  
                lsof -c httpd
        查看指定用戶打開的文件 
        lsof -u root | more 
         查看指定目錄下被打開的文件   
         lsof +D /var/log/ 
         lsof +d /var/log/ 
         參數+D為遞歸列出目錄下被打開的文件,參數+d為列出目錄下被打開的文件 

 網絡管理
 查看所有網絡連接
        lsof -i –n       lsof [email protected] 
 通過參數-i查看網絡連接的情況,包括連接的ip、端口等以及一些服務的連接情況
 例如:
    sshd等。也可以通過指定ip查看該ip的網絡連接情況 
 查看端口連接情況  
    lsof -i :80 -n  
 通過參數-i:端口可以查看端口的占用情況,-i參數還有查看協議,ip的連接情況等 
 查看指定進程打開的網絡連接 
     lsof -i –n -a -p 9527    參數-i、-a、-p等,-i查看網絡連接情況,-a查看存在的進程,-p指定進程 
 查看指定狀態的網絡連接
     lsof -n -P -i TCP -s TCP:ESTABLISHED 
     -n:no host names, -P:no port names,-i TCP指定協議,-s指定協議狀態通過多個參數可以 清晰的查看網絡連接情況、協議連接情況等 

恢復刪除文件
    lsof |grep /var/log/messages
    rm -f /var/log/messages
    lsof |grep /var/log/messages
    cat /proc/653/fd/6 
    cat /proc/653/fd/6 > /var/log/messages 

進程管理工具


 kill命令: 

 向進程發送控制信號,以實現對進程管理,每個信號對應一個數字,信號名稱以SIG開頭 (可省略),不區分大小寫
 顯示當前系統可用信號: kill –l,trap -l 
 常用信號:man 7 signal 
 1) SIGHUP: 無須關閉進程而讓其重讀配置文件 
 2) SIGINT: 中止正在運行的進程;相當於Ctrl+c 
 3) SIGQUIT:相當於ctrl+\ 
 9) SIGKILL: 強制殺死正在運行的進程  15)
 SIGTERM:終止正在運行的進程  
 18) SIGCONT:繼續運行 
 19) SIGSTOP:後臺休眠  指定信號的方法:
 (1) 信號的數字標識:1, 2, 9  
 (2) 信號完整名稱:SIGHUP
 (3) 信號的簡寫名稱:HUP 

進程管理工具 

按PID:kill [-SIGNAL]  pid … 
    kill –n SIGNAL pid;kill –s SIGNAL pid
按名稱:killall [-SIGNAL]  comm… 
按模式:pkill [options] pattern  
    -SIGNAL 
    -u uid: effective user,生效者 
    -U uid: real user,真正發起運行命令者  
    -t terminal: 與指定終端相關的進程 
    -l: 顯示進程名(pgrep可用) 
    -a: 顯示完整格式的進程名(pgrep可用)  -P pid: 顯示指定進程的子進程   

作業管理


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

並行運行


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

任務計劃


Linux任務計劃,周期性任務執行
未來的每一段時間點執行一次任務
    at
    batch :系統自行選擇空閑時間執行此處指定的任務
周期性運行某任務
    cron

at任務


  包:at
  at命令:
  常用選項:
        -V 顯示版本信息
        -l 列出指定隊列中等帶運行的作業,相當於atq
        -d 刪除指定的作業,相當於atrm
        -c 查看具體作業任務
        -f /path/file 指定的文件中讀取任務
註意:作業執行命令的結果的標準輸出和錯誤以郵件通知給相關用戶
TIME :定義出什麽時間進行at這項任務的時間
    HH:MM [YYYY-mm-dd]
    noon, midnight, teatime(4pm)
tomorrow
now+#{minutes,hours,days, OR weeks}    

他的定時任務放在了  /var/spool/at下   

例:at 11:27
at> wall "dang"        
at> <EOT>
job 4 at 2018-08-29 11:27  退出時按Ctrl+d
例:at now+1minutes  [這是一分鐘後執行]
at> wall "dang"        
at> <EOT>
job 4 at 2018-08-29 11:27

at時間格式


    HH:MM 02:00
在今日的 HH:MM 進行,若該時刻已過,則明天此時執行任務
HH:MM YYYY-MM-DD 02:00 2016-09-20
 規定在某年某月的某一天的特殊時刻進行該項任務
HH:MM[am|pm] [Month] [Date]
 04pm March 17
 17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
 在某個時間點再加幾個時間後才進行該項任務
 now + 5 min
 02pm + 3 days  

at任務


執行方式:
 1)交互式 2)輸入重定向 3)at –f 文件
依賴與atd服務,需要啟動才能實現at任務
at隊列存放在/var/spool/at目錄中

/etc/at.{allow,deny}控制用戶是否能執行at任務
 白名單:/etc/at.allow【默認沒有手工鍵】 默認不存在,只有該文件中的用戶才能執行at命令
    例:把dang 加到這個文件中,他就有at權限了

 黑名單:/etc/at.deny【默認有】
        例:把dang 加到這個文件中,他就沒有at權限了  

 默認存在,拒絕該文件中用戶執行at命令,而沒有在
at.deny 文件中的使用者則可執行
 如果兩個文件都不存在,只有 root 可以執行 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 
        tail -f  /var/log/cron  可以跟蹤/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 * * * wang /bin/echo "Howdy!"
計劃任務
時間表示法:
? (1) 特定值
給定時間點有效取值範圍內的值
? (2) *
給定時間點上有效取值範圍內的所有值
表示“每...”
? (3) 離散取值
#,#,#
? (4) 連續取值
#-#
? (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 * * * *
示例:每3小時echo和wall命令
0 */3 * * * centos /bin/echo “howdy”;/usr/bin/wall “welcome to Magedu!”

計劃任務
? 系統的計劃任務:
/etc/crontab 配置文件
/etc/cron.d/ 配置文件  
兩個多可以:例:vim /etc/cron.d/dang[然後把配置文件寫進去]

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

anacron系統


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

管理臨時文件


    CentOS6使用/etc/cron.daily/tmpwatch定時清除臨時文件
CentOS7使用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  

用戶計劃任務


    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}  【allow 白名單  ,deny 黑名單  用法和at的一樣】  

   cd /var/spool/cron/   定時任務寫完以後 會放在一個目錄下 , root能看

   root查看用戶的定時任務  roo -i -u dang[查看dang 用戶的定時任務]  

   crontab -e  要想帶顏色 寫入文件 vim /etc/profile.d/jiu.sh
   :內容為export EDITOR=vim

進程和定時任務