Linux_day05_02_計劃任務

2020-10-03 12:01:58

計劃任務

Linux計劃任務
  • 未來在某一時間點執行一次任務:at、batch
  • 週期性的執行某個任務:crond
  1. at命令

需要安裝:yum -y install at

[root@localhost ~]# at --help
at: invalid option -- '-'
Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...
       at [-V] [-q x] [-f file] [-mMlbv] -t time
       at -c job ...
       atq [-V] [-q x]
       at [ -rd ] job ...
       atrm [-V] job ...
       batch
  • 用法說明:at 引數 時間
  • 引數
    • -m:當指定的任務被完成之後,將給使用者傳送郵件,即使沒有標準輸出
    • -I:atq的別名
    • -d:atrm的別名
    • -v:顯示任務將被執行的時間
    • -c:列印任務的內容到標準輸出
    • -V:顯示版本資訊
    • -q:使用指定佇列
    • -f:從指定檔案讀入任務,而不是從標準輸入讀入
    • -t:一時間引數的形式提交要執行的任務
  • 時間
    • HH::MM [YYYY-MM-DD]
    • moon, midnight, teatime
    • tomorrow
    • now + num {minutes, hours, days, weeks}
  • atq:檢視計劃任務
  • atrm 2:移除任務

提前啟動atd.service:systemctl start atd

  1. batch命令

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

  • 用法說明:batch 引數 時間
  • 引數
    • -f:指定包含具體指令的任務檔案
    • -q:指定新任務的佇列名稱
    • -m:任務執行完後向使用者傳送Email
  • 範例
batch 
at> echo 1234
at> <EOT>
job 5 at Sun Apr 28 08:49:00 2013
Linux系統任務

Linux系統則是由crond服務來控制計劃任務。Linux上有許多非常多的計劃性任務,所以這個服務是預設啟動的。另外,由於使用者也可以設定計劃任務,所以提供了使用者控制計劃任務的命令crontab命令

cat /etc/crontab 

SHELL=/bin/bash	指定shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin	系統執行命令的路徑
MAILTO=root		任務執行通過郵件傳送給root使用者

# 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
0-30 */2 3,6,9 1 root /usr/bin/echo hello
  分 時 日 月 周 使用者名稱 任務命令

時間

  • 特定值:給定時間點有效範圍內的取值
  • *:給定時間點上有效取值範圍內的所有值,表示「每…」
  • 離散取值:通過逗號進行離散取值1,3,6,9
  • 連續取值:通過減號-可以進行連續取值0-30
  • 定義步長:*/5:表示「每5…」

crontab命令

  • -l:列出所有任務
  • -e:編輯任務
  • -r:移除所有任務
  • -i:互動式
  • -u:指定使用者

練習題

  1. 設定一次性計劃任務在18:00時關閉系統,並檢視任務資訊
at 18:00
at> poweroff
at> <EOT>

atq # 檢視任務資訊
  1. 每天晚上的24點時打包壓縮 /etc/passwd /etc/shadow /etc/group /etc/gshadow 為 file.tar.gz
crontab -e -uroot 0 0 * * * tar -czvf file.tar.gz /etc/passwd /etc/shadow /etc/group /etc/gshadow
  1. 每週一的每隔五分鐘列出磁碟使用狀況
crontab -e -uroot */5 * * * 1 df -Th
  1. 每天的8:30與網際網路時間同步伺服器pool.ntp.org同步時間
crontab -e -uroot 30 8 * * * ntpdate pool.ntp.org
  1. 通過crontab命令檢視root的計劃任務,通過檔案檢視類工具列出/var/spool/cron下對應的檔案內容
crontab -l -uroot

cat /var/spool/cron/root