進程和任務計劃
mysql
-----------------------------------------------------------------------------------------------------------------------------------linux
進程:正在執行中的程序,在內存中佔用空間,程序和進程不是一一對應的,一個程序能夠對應多個進程ios
內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等nginx
Process: 運行中的程序的一個副本,是被載入內存的一個指令集合面試
進程ID(Process ID,PID)號碼被用來標記各個進程正則表達式
UID、GID、和SELinux語境決定對文件系統的存取和訪問權限,UID:用戶身份,GID:組身份算法
一般從執行進程的用戶來繼承sql
存在生命週期apache
task struct:Linux內核存儲進程信息的數據結構格式編程
task list:多個任務的的task struct組成的鏈表
進程建立:
init:第一個進程
父子關係
進程:都由其父進程建立,CoW
fork(), clone()
CoW:copy or write,寫實複製,數據未發生變化時,父進程pid1和子進程pid2會指向相同的內存空間,也就意味着父進程和子進程共享相同的內存空間,它們看到的數據是同樣的。當修改子進程內存空間時,會複製一塊原來指向的內存空間到新的內存空間,子進程pid2指向新的內存空間,再進行數據修改,這麼作優勢是當不進行進程修改時父進程和子進程共享內存空間,節省了資源,機制相似於LVM的快照。
進程樹指令:pstree
{}裏爲線程
進程和線程區別:進程是完成1個任務所需資源的集合,進程能夠看做是1個任務或者1個項目,項目須要人員和資源,其中的人員就是線程,因此1個進程對應多個線程,線程至少爲1,同一個線程之間使用的資源是共享的
類比:人員(線程),資源(內存空間,文件等)
進程和進程之間內部資源互不影響
進程process
線程thread
cpu將程序任務切成了很短的時間片,給人錯覺是同時執行,其實程序是輪流執行,不是同時執行
cpu的上下文切換會帶來大量資源消耗,進程越多,資源消耗越多,所以父進程生成很少的子進程,由子進程生成線程,讓線程提供給客戶端,從而減小上下文切換,不過線程缺點是有一個線程崩潰,其它線程也會收到影響
進程的基本狀態和轉換
DMA:直接內存訪問,不須要通過cpu,只須要cpu發一個指令給DMA設備,讓磁盤文件讀入DMA,DMA發給總線,總線再發給內存,這樣cpu不用全程負責,節省資源
進程的基本狀態
<1>建立狀態:進程在建立時須要申請一個空白PCB(process control block進程控制塊),向其中填寫控制和管理進程的信息,完成資源分配。若是建立工做沒法完成,好比資源沒法知足,就沒法被調度運行,把此時進程所處狀態稱爲建立狀態
<2>就緒狀態:進程已準備好,已分配到所需資源,只要分配到CPU就可以當即運行
<3>執行狀態:進程處於就緒狀態被調度後,進程進入執行狀態
<4>阻塞狀態:正在執行的進程因爲某些事件(I/O請求,申請緩存區失敗)而暫時
沒法運行,進程受到阻塞。在知足請求時進入就緒狀態等待系統調用
<5>終止狀態:進程結束,或出現錯誤,或被系統終止,進入終止狀態。沒法再執行
狀態之間轉換六種狀況
<1>運行——>就緒:1,主要是進程佔用CPU的時間過長,而系統分配給該進程佔
用CPU的時間是有限的;2,在採用搶先式優先級調度算法的系統中,當有更高
優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變爲
就緒狀態。
<2>就緒——>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適
的進程分配CPU
<3>運行——>阻塞:正在執行的進程因發生某等待事件而沒法執行,則進程由執
行狀態變爲阻塞狀態,如發生了I/O請求
<4>阻塞——>就緒:進程所等待的事件已經發生,就進入就緒隊列
如下兩種狀態是不可能發生的:
<1>阻塞——>運行:即便給阻塞進程分配CPU,也沒法執行,操做系統在進行調
度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
<2>就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態
進程優先級
進程優先級:
系統優先級:數字越小,優先級越高
0-139(CentOS4,5)
各有140個運行隊列和過時隊列
0-98,99(CentOS6)
實時優先級: 99-0 值最大優先級最高
nice值:-20到19,對應系統優先級100-139或99,nice值越低,優先級越高
Big O:時間複雜度,用時和規模的關係
O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n),此順序排下來性能愈來愈差
cpu會給運行隊列的進程分配時間片,當時間片內進程沒有運行完,該隊列內的進程會去等待隊列,當全部進程都沒有完成,等待隊列會變成運行隊列,運行隊列變成等待隊列,繼續運行
進程相關概念
進程內存:
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
進程狀態
<1>Linux內核:搶佔式多任務
<2>進程類型:
守護進程: daemon,在系統引導過程當中啓動的進程,和終端無關進程,在後臺執行,不佔用終端資源
前臺進程:跟終端相關,經過終端啓動的進程,佔用終端資源
注意:二者可相互轉化
<3>進程狀態:
運行態:running
就緒態:ready
睡眠態:
可中斷:interruptable
不可中斷:uninterruptable
中止態:stopped,暫停於內存,但不會被調度,除非手動啓動
僵死態:zombie,結束進程,父進程結束前,子進程不關閉
搶佔式多任務觸發條件
<1>時間片到了會釋放cpu
<2>來高優先級進程,目前進程沒有執行完也會釋放cpu
系統管理工具
<1>進程的分類:
CPU-Bound:CPU密集型,非交互
IO-Bound:IO密集型,交互
<2>Linux系統狀態的查看及管理工具:pstree, ps, pidof, pgrep, top, htop,
glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
<3>pstree命令:
pstree - display a tree of processes
<4>ps: process state,顯示當前進程的一個快照
ps - report a snapshot of the current processes
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中
查看進程進程ps
ps [OPTION]...
支持三種選項:
UNIX選項 如-A -e
BSD選項 如a
GNU選項 如--help
選項:BSD風格
默認顯示當前終端中的進程
a 選項包括全部終端中的進程
x 選項包括不連接終端的進程,顯示?的地方是和終端無關,顯示的是守護進程
u 選項顯示進程全部者的信息
f 選項顯示進程樹,至關於 --forest
k|--sort 屬性 對屬性排序,屬性前加- 表示倒序,
o 屬性… 選項顯示定製的信息 pid、cmd、%cpu、%mem,ps axo pid,cmd,%cpu
L 顯示支持的屬性列表
ps axo euser,ruser,euser表示起做用的用戶,ruser表示啓動的用戶,對於suid特殊權限查看方便
Unix風格
-C cmdlist 指定命令,多個命令用,分隔,ps -C cmd1 -C cmd2…
-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輸出屬性
<1>VSZ: Virtual memory SiZe,虛擬內存集,線性內存
<2>RSS: ReSident Size, 常駐內存集
<3>STAT:進程狀態
R:running 運行
S: interruptable sleeping 可中斷的睡眠
D: uninterruptable sleeping 不可中斷的睡眠
T: stopped
Z: zombie
+: 前臺進程
l: 多線程進程
L:內存分頁並帶鎖
N:低優先級進程
<: 高優先級進程
s: session leader,會話(子進程)發起者
ps aux 結果列表中VSZ表示虛擬內存,操做系統承諾給進程的內存,RSS表示物理空間實際給分配的空間
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
taskset 進程綁定到cpu上,taskset -cp 0 29623,進程29623綁定到0號cpu上
把固定進程綁到cpu上,能夠提高cpu性能
ps -fU test,test用戶開啓的進程
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'
進程優先級
<1>進程優先級調整:
靜態優先級:100-139
進程默認啓動時的nice值爲0,優先級爲120
只有根用戶才能下降nice值(提升優先性)
<2>nice命令:
nice [OPTION] [COMMAND [ARG]...],nice -n 10 sleep 10將sleep10命令nice優先級設爲10
<3>renice命令:
renice [-n] priority pid...,renice -n -10 52999,進程號爲52999的命令nice優先級改成-10
<4>查看:
ps axo pid,comm,ni
搜索進程
<1>最靈活:ps 選項 | 其它命令
<2>按預約義的模式:pgrep
pgrep [options] pattern
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名,只顯示命令,不顯示參數,後面支持通配符或者正則表達式
-a: 顯示完整格式的進程名,顯示完整命令和參數
-P pid: 顯示指定進程的子進程
<3>按確切的程序名稱:/sbin/pidof
pidof bash,能夠用來判斷某個進程是否存在,某個服務是否進行
面試 搜索app的進程並關閉:pgrep 「app」 ,以後kill,或者pkill
系統工具
<1>uptime
顯示當前時間,系統已啓動的時間、當前上線人數,系統平均負載(一、五、10分
鐘的平均負載,通常不會超過1)
<2>系統平均負載:
指在特定時間間隔內運行隊列中的平均進程數
<3>一般每一個CPU內核的當前活動進程數不大於3,那麼系統的性能良好。若是每
個CPU內核的任務數大於5,那麼此主機的性能有嚴重問題
<4>若是linux主機是1個雙核CPU,當Load Average 爲6的時候說明機器已經被
充分使用
進程管理工具
top:有許多內置命令,輸入top命令進入列表後排序按鍵:
排序:
P:以佔據的CPU百分比,%CPU
M:佔據內存百分比,%MEM
T:累積佔據CPU時長,TIME+
首部信息顯示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分別顯示:1 (數字)
memory信息:m命令
退出命令:q
修改刷新時間間隔:s
終止指定進程:k
保存文件:W
欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閒
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機偷走的時間
進程管理工具
<1>選項:
-d #: 指定刷新時間間隔,默認爲3秒
-b: 所有顯示全部進程
-n #: 刷新多少次後退出
<2>htop命令:EPEL源
選項:
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程
-s COLUME: 以指定字段進行排序
子命令:
s: 跟蹤選定進程的系統調用
l: 顯示選定進程打開的文件列表
a:將選定的進程綁定至某指定CPU核心
t: 顯示進程樹
top -p -H 進程號,根據該進程查看它的線程
內存空間
內存空間使用狀態:
free [OPTION]
-b 以字節爲單位
-m 以MB爲單位
-g 以GB爲單位
-h 易讀格式
-o 不顯示-/+buffers/cache行
-t 顯示RAM + swap的總和
-s n 刷新間隔爲n秒
-c n 刷新n次後即退出
free中
buffers是緩衝區,速度不一樣,解決速度不匹配的問題
cached是緩存
-/+ buffers/cache:已經用的內存,used減去buffers和cached的數字就是-buffers/cache獲得的,空餘的free加上buffers和cached的就是+ buffers/cache
內存工具
<1>vmstat命令:虛擬內存信息
vmstat [options] [delay [count]]
vmstat 2 5
<2>procs:
r:可運行(正運行或等待運行)進程的個數,和核心數有關
b:處於不可中斷睡眠態的進程個數(被阻塞的隊列的長度)
<3>memory:
swpd: 交換內存的使用總量
free:空閒物理內存總量
buffer:用於buffer的內存總量
cache:用於cache的內存總量
<4>swap:
si:從磁盤交換進內存的數據速率(kb/s)
so:從內存交換至磁盤的數據速率(kb/s)
<5>io:
bi:從塊設備讀入數據到系統的速率(kb/s)
bo: 保存數據至塊設備的速率
<6>system:
in: interrupts 中斷速率,包括時鐘
cs: context switch 進程切換速率
<7>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.
<8>選項:
-s: 顯示內存的統計數據
vmstat 1 一秒執行一次
vmstat 1 10 一秒執行一次,執行十次退出
系統監控工具
<1>glances命令:EPEL源
<2>glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-
t refresh] [-f file] [-o output]
能夠坐在本身主機前查看其它設備
C/S模式下運行glances命令
服務器模式:
glances -s -B IPADDR
IPADDR: 指明監聽的本機哪一個地址
客戶端模式:
glances -c IPADDR
IPADDR:要連入的服務器端地址
<1>dstat命令:系統資源統計,代替vmstat,iostat,須要安裝
<2>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相關的統計數據
<1>iotop命令是一個用來監視磁盤I/O使用情況的top類工具iotop具備與top類似的UI,其中包括PID、用戶、I/O、進程等相關信息,可查看每一個進程是如何使用IO,須要安裝
<2>iotop輸出
第一行:Read和Write速率總計
第二行:實際的Read和Write速率
第三行:參數以下:
線程ID(按p切換爲進程ID)
優先級
用戶
磁盤讀速率
磁盤寫速率
swap交換百分比
IO等待所佔的百分比
線程/進程命令
-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單位,而不是對人友好的單位。在非交互模式下,腳本編程有用
-t, --time 加上時間戳,非交互非模式
-q, --quiet 禁止頭幾行,非交互模式,有三種指定方式
-q 只在第一次監測時顯示列名
-qq 永遠不顯示列名
-qqq 永遠不顯示I/O彙總
交互按鍵
left和right方向鍵:改變排序
r:反向排序
o:切換至選項--only
p:切換至--processes選項
a:切換至--accumulated選項
q:退出
i:改變線程的優先級
哪一個磁盤形成IO嚴重?iotop可查詢
<1>Lsof:list open files查看當前系統文件的工具。在linux環境下,一切皆文件,用戶經過文件不只能夠訪問常規數據,還能夠訪問網絡鏈接和硬件如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP)套接字等,系統在後臺都爲該應用程序分配了一個文件描述符
<2>命令參數
-a:列出打開文件存在的進程
-c<進程名>:列出指定進程所打開的文件
-g:列出GID號進程詳情
-d<文件號>:列出佔用該文件號的進程
+d<目錄>:列出目錄下被打開的文件
+D<目錄>:遞歸列出目錄下被打開的文件
-n<目錄>:列出使用NFS的文件
-i<條件>:列出符合條件的進程(四、六、協議、:端口、 @ip )
-p<進程號>:列出指定進程號所打開的文件
-u:列出UID號進程詳情
-h:顯示幫助信息
-v:顯示版本信息。
-n: 不反向解析網絡名字
<3>進程管理
<4>查看由登錄用戶啓動而非系統啓動的進程
lsof /dev/pts1
<5>指定進程號,能夠查看該進程打開的文件
lsof -p 9527
<6>文件管理
<7>查看指定程序打開的文件
lsof -c httpd
<8>查看指定用戶打開的文件
lsof -u root | more
<9>查看指定目錄下被打開的文件
lsof +D /var/log/
lsof +d /var/log/
參數+D爲遞歸列出目錄下被打開的文件,參數+d爲列出目錄下被打開的文件
<10>網絡管理
<11>查看全部網絡鏈接
lsof -i –n,lsof -i@127.0.0.1
經過參數-i查看網絡鏈接的狀況,包括鏈接的ip、端口等以及一些服務的鏈接狀況,例如:sshd等。也能夠經過指定ip查看該ip的網絡鏈接狀況
<12>查看端口鏈接狀況(面試題)
lsof -i :80 -n
經過參數-i:端口能夠查看端口的佔用狀況,-i參數還有查看協議,ip的鏈接狀況等
<13>查看指定進程打開的網絡鏈接
lsof -i –n -a -p 9527
參數-i、-a、-p等,-i查看網絡鏈接狀況,-a查看存在的進程,-p指定進程
<14>查看指定狀態的網絡鏈接
lsof -n -P -i TCP -s TCP:ESTABLISHED
-n:no host names, -P:no port names,-i TCP指定協議,-s指定協議狀態經過多個參數能夠清晰的查看網絡鏈接狀況、協議鏈接狀況等
<15>恢復刪除文件
lsof |grep /var/log/messages
rm -f /var/log/messages 前提是使用這個文件的程序沒有關閉
lsof |grep /var/log/messages 查看誰在用這個文件哪一個程序在用
cat /proc/653/fd/6 進到653進程下的fd文件夾
ls fd/ -l 看到刪除的文件還在
cat /proc/653/fd/6 > /var/log/messages 恢復
kill命令:
向進程發送控制信號,以實現對進程管理,每一個信號對應一個數字,信號名稱以SIG開頭(可省略),不區分大小寫
顯示當前系統可用信號: kill –l,trap -l
經常使用信號:man 7 signal
1) SIGHUP: 無須關閉進程而讓其重讀配置文件,kill -SIGHUP 進程號
2) SIGINT: 停止正在運行的進程;至關於Ctrl+c,kill -2 `pidof bc`
3) SIGQUIT:至關於ctrl+\
9) SIGKILL: 強制殺死正在運行的進程
15) SIGTERM:終止正在運行的進程,kill指令默認選項
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…,killall bash,結束所有bash的進程,killall -9 強制結束
按模式:pkill [options] pattern,可接正則表達式
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名(pgrep可用)
-a: 顯示完整格式的進程名(pgrep可用)
-P pid: 顯示指定進程的子進程
做業管理
<1>Linux的做業控制
前臺做業:經過終端啓動,且啓動後一直佔據終端,ctrl+z放到後臺休眠
後臺做業:可經過終端啓動,但啓動後即轉入後臺運行(釋放終端)
<2>讓做業運行於後臺
(1) 運行中的做業: Ctrl+z
(2) 還沒有啓動的做業: COMMAND &
<3>後臺做業雖然被送日後臺運行,但其依然與終端相關;退出終端,將關閉後臺做業。若是但願送日後臺後,剝離與終端的關係
nohup COMMAND &>/dev/null &
screen;COMMAND
<4>查看當前終端全部做業:jobs
<5>做業控制:
fg [[%]JOB_NUM]:把指定的後臺做業調回前臺
bg [[%]JOB_NUM]:讓送日後臺的做業在後臺繼續運行
kill [%JOB_NUM]: 終止指定的做業」
前屏命令後跟空格和&可直接切換爲後臺做業,例如ping 192.168.1.1 &
後臺中止轉後臺運行:jobs命令後bg jobnumber,或者kill -18
後臺運行轉後臺中止:fg jobnumber後ctrl+c或者kill -19
並行運行
同時運行多個進程,提升效率
<1>方法1
vi all.sh
./f1.sh&
./f2.sh&
./f3.sh&
<2>方法2
(./f1.sh&);(./f2.sh&);(./f3.sh&)
<3>方法3
{ ./f1.sh& ./f2.sh& ./f3.sh& } 先後有空格
任務計劃
週期性執行任務
將來的某時間點執行一次任務
at 用戶指定時間去執行任務
batch 系統自行選擇空閒時間去執行任務
週期性運行某認爲
cron
開機自啓動,以atd爲例
CentOS6 chkconfig atd on
CentOS7 systemctl enabled atd
查看是否看機啓動
CentOS6 chkconfig --listatd
CentOS7 systemctl is-enabled atd
當前是不是啓動狀態
CentOS6 service atd status
CentOS7 system status atd
啓動當前服務
CentOS6 service atd start
CentOS7 systemctl start atd
關閉當前服務,以防火牆爲例
CentOS6 chkconfig iptables off
CentOS7 systemctl disable firewalld
/etc/sysconfig/selinux
selinux=disabled
保證時間同步的前提才能配置計劃任務
同步時間:
CentOS6實現NTP同步時間
ntpdate 172.20.0.1
自動同步時間配置文件目錄vim /etc/ntp.conf
#Use public 下
server 172.20.0.1 iburst
server ntp.aliyun.com iburst
chkconfig –list ntpd
chkconfig ntpd on
service ntpd status
service ntpd start
若是須要作一個內部服務器,每臺設備須要以它爲標準同步時間,還須要在紅方塊處註釋掉
CentOS7實現同步時間
chrony
systemctl enable chronyd
ntpdate 172.20.0.1
vim /etc/chrony.conf
#Use public 下
server 172.20.0.1 iburst
allow ip地址
local stratum 10取消註釋
systemctl restart chronyd
配置任務:
at只適合作一次性的任務,任務存放目錄/var/sool/at
at 10:15 回車
at> wall 「hello」
at> ctrl + d 退出
at -l 列出等待運行計劃任務
at -c 1 查看計劃任務內容
atq =at -l
at now+1minutes 一分鐘後執行
at裏標準輸出不會在屏幕顯示 ,而是以郵件形式發送,所以執行過程當中不要產生標準輸出,好比說echo不會在屏幕顯示,好比說
標準輸出丟入無底洞,將不會產生大量文本的郵件
腳本編寫2:00備份文件的腳本
命令寫入atjob.txt,at -f atjob.txt 4:00,4::00時候將會執行該任務
at -d =atrm,刪除任務計劃
at -m 當任務完成會給用戶發送郵件,即便沒有標準輸入也會發送郵件
<1>HH:MM 02:00
在今日的 HH:MM 進行,若該時刻已過,則明天此時執行任務
<2>HH:MM YYYY-MM-DD 02:00 2016-09-20
規定在某年某月的某一天的特殊時刻進行該項任務
<3>HH:MM[am|pm] [Month] [Date]
04pm March 17
17:20 tomorrow
<4>HH:MM[am|pm] + number [minutes|hours|days|weeks]
在某個時間點再加幾個時間後才進行該項任務
now + 5 min
02pm + 3 days
/etc/at.{allow,deny}控制用戶是否能執行at任務
白名單:/etc/at.allow 默認不存在,只有該文件中的用戶才能執行at命令
黑名單:/etc/at.deny 默認存在,拒絕該文件中用戶執行at命令,而沒有在at.deny 文件中的使用者則可執行
若是兩個文件都不存在,只有 root 能夠執行 at 命令
既不在白名單,又不在黑名單,沒法執行at任務
既在白名單,又在黑名單,能夠執行at任務
沒有白名單,只拒絕黑名單的用戶
cron
週期性任務計劃
依賴cronie主程序包
cronie-anacron:cronie的補充程序
crontabs 提供系統維護任務
cron設置開機啓動
計劃中%有特殊含義,所以寫個腳本在計劃裏調用,圖中back.sh裏用到了備份腳本命令,位置對齊,*表示不定義,有每的意思
下圖表示1號10號或者週日執行
下圖表示每兩小時,每十分鐘,星期一到星期五
<4>系統cron任務:/etc/crontab
<5>註釋行以 # 開頭
<6>詳情參見 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分以test用戶身份運行echo命令
10 21 * * * test /bin/echo "Howdy!"
時間格式
<1>@reboot Run once after reboot
<2>@yearly 0 0 1 1 *
<3>@annually 0 0 1 1 *
<4>@monthly 0 0 1 * *
<5>@weekly 0 0 * * 0
<6>@daily 0 0 * * *
<7>@hourly 0 * * * *
<8>示例:每3小時echo和wall命令
0 */3 * * * centos /bin/echo 「howdy」;/usr/bin/wall 「welcome to Magedu!」
/etc/crontab 配置文件
/etc/cron.d/ 配置文件,按照格式放入此目錄
/etc/cron.hourly/ 腳本
/etc/cron.daily/ 腳本
/etc/cron.weekly/ 腳本
/etc/cron.monthly/ 腳本
以上這些只有root能用,對於普通用戶,實用命令crontab
crontab -e 建立文件,格式與/etc/crontab同樣
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出全部任務
-e: 編輯任務
-r: 移除全部任務
-i:同-r一同使用,以交互式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務-u 指定以誰的用戶名
任務存放位置/var/spool/cron/USERNAME
白名單黑名單/etc/cron.{allow,deny},規則和at的白名單黑名單規則同樣