進程和任務計劃

                                    進程和任務計劃
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

image.png

{}裏爲線程

進程和線程區別:進程是完成1個任務所需資源的集合,進程能夠看做是1個任務或者1個項目,項目須要人員和資源,其中的人員就是線程,因此1個進程對應多個線程,線程至少爲1,同一個線程之間使用的資源是共享的

類比:人員(線程),資源(內存空間,文件等)

進程和進程之間內部資源互不影響

進程process

線程thread

 

cpu將程序任務切成了很短的時間片,給人錯覺是同時執行,其實程序是輪流執行,不是同時執行

 

cpu的上下文切換會帶來大量資源消耗,進程越多,資源消耗越多,所以父進程生成很少的子進程,由子進程生成線程,讓線程提供給客戶端,從而減小上下文切換,不過線程缺點是有一個線程崩潰,其它線程也會收到影響

 

進程的基本狀態和轉換

image.png

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),此順序排下來性能愈來愈差

image.png

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 startimage.png

若是須要作一個內部服務器,每臺設備須要以它爲標準同步時間,還須要在紅方塊處註釋掉image.png

 

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 chronydimage.png

 

配置任務:

at只適合作一次性的任務,任務存放目錄/var/sool/at

at 10:15 回車

at> wall 「hello」

at> ctrl + d 退出

image.png

at -l 列出等待運行計劃任務

at -c 1 查看計劃任務內容

atq =at -l

at now+1minutes 一分鐘後執行

at裏標準輸出不會在屏幕顯示 ,而是以郵件形式發送,所以執行過程當中不要產生標準輸出,好比說echo不會在屏幕顯示,好比說

image.png

標準輸出丟入無底洞,將不會產生大量文本的郵件

腳本編寫2:00備份文件的腳本

image.png

 

命令寫入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裏用到了備份腳本命令,位置對齊,*表示不定義,有每的意思

image.png

下圖表示1號10號或者週日執行

image.png

下圖表示每兩小時,每十分鐘,星期一到星期五

image.png

<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的白名單黑名單規則同樣

相關文章
相關標籤/搜索