程序和任務計劃
-----------------------------------------------------------------------------------------------------------------------------------
程序:正在執行中的程式,在記憶體中占用空間,程式和程序不是一一對應的,一個程式可以對應多個程序
核心的功用:程序管理、檔案系統、網絡功能、記憶體管理、驅動程式、安全功能等
Process: 運作中的程式的一個副本,是被載入記憶體的一個指令集合
程序ID(Process ID,PID)号碼被用來标記各個程序
UID、GID、和SELinux語境決定對檔案系統的存取和通路權限,UID:使用者身份,GID:組身份
通常從執行程序的使用者來繼承
存在生命周期
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
顯示目前時間,系統已啟動的時間、目前上線人數,系統平均負載(1、5、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<條件>:列出符合條件的程序(4、6、協定、:端口、 @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 [email protected]
通過參數-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
-l: 顯示程序名(pgrep可用)
-a: 顯示完整格式的程序名(pgrep可用)
作業管理
<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
vim /etc/chrony.conf
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的白名單黑名單規則一樣