Shell-Crontab調度任務

1、調度任務

(1)系統(tǒng)任務調度

說明:

  • 系統(tǒng)周期性所要執(zhí)行的工作,比如寫緩存數據到硬盤、日志清理等;
  • 配置文件:配置文件說明:
SHELL=/bin/bash   # SHELL變量指定了系統(tǒng)要使用哪個shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin     #PATH變量指定了系統(tǒng)執(zhí)行命令的路徑 
MAILTO=root   # MAILTO變量指定了crond的任務執(zhí)行信息將通過電子郵件發(fā)送給root用戶,如果MAILTO變量的值為空,則表示不發(fā)送任務執(zhí)行信息給用戶

# 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

(2) 用戶任務調度

說明:

  • 用戶自定義需要定時執(zhí)行的任務
  • 所有用戶定義的crontab文件都被保存在/var/spool/cron目錄中。

配置文件說明:

[root@iZm5ef8xghzfk338nqbc36Z etc]# pwd
/etc
[root@iZm5ef8xghzfk338nqbc36Z etc]# ls -al cron
cron.d/       cron.daily/   cron.deny     cron.hourly/  cron.monthly/ crontab       cron.weekly/  
# 文件作用說明
# /etc/cron.deny     該文件中所列用戶不允許使用crontab命令
# /etc/cron.allow    該文件中所列用戶允許使用crontab命令
# /var/spool/cron/   所有用戶crontab文件存放的目錄,以用戶名命名
# /etc/cron.daily    是每天執(zhí)行一次的job
# /etc/cron.weekly   是每個星期執(zhí)行一次的job
# /etc/cron.monthly  是每月執(zhí)行一次的job
# /etc/cron.hourly   是每個小時執(zhí)行一次的job
# /etc/cron.d        是系統(tǒng)自動定期需要做的任務

常見錯誤:

(1) crontab -l 提示 "no crontab for root"
[cause]:
    liunx服務器 第一次使用 crontab ,還沒有生成對應的文件導致的
[solve]:
    使用crontab -e 進行編輯,系統(tǒng)會進行初始化操作。
[result]:
    no crontab for root - using an empty one
    crontab: installing new crontab

2、crond服務

說明:

  • crond是linux系統(tǒng)中用來定期執(zhí)行命令或者指定程序任務的一種服務或者軟件。
  • crond默認情況(每分鐘),會檢查系統(tǒng)中是否有需要執(zhí)行的定時任務,如果有,就會根據事先定義好的規(guī)則來執(zhí)行這個定時任務。

操作:

  • 查看是否安裝crond服務
[指令]: rpm -qa | grep crontab
[結果]:已安裝
    [root@iZm5ef8xghzfk338nqbc36Z cron]# rpm -qa | grep crontab
    crontabs-1.11-6.20121102git.el7.noarch
  • 安裝crond:
[指令]:yum install -y crontabs 
  • crond 操作
/sbin/service crond start    //啟動服務
/sbin/service crond stop     //關閉服務
/sbin/service crond restart  //重啟服務
/sbin/service crond reload   //重新載入配置

3、crontab

說明:

  • crontab命令被用來提交和管理用戶的需要周期性執(zhí)行的任務,與windows下的計劃任務類似,當安裝完成操作系統(tǒng)后,默認會安裝此服務工具,并且會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執(zhí)行的任務,如果有要執(zhí)行的任務,則自動執(zhí)行該任務。

語法:

crontab [選項] [參數]
[選項]
    -e:編輯該用戶的計時器設置;
    -l:列出該用戶的計時器設置;
    -r:刪除該用戶的計時器設置;
    -u<用戶名稱>:指定要設定計時器的用戶名稱。
[參數]:
    crontab文件:指定包含待執(zhí)行任務的crontab文件

crontab服務:

  • 查看crontab服務狀態(tài):
service crond status
  • 手動啟動crontab服務:
service crond start
  • 查看crontab服務是否已設置為開機啟動,執(zhí)行命令:
ntsysv
  • 加入開機自動啟動:
chkconfig –level 35 crond on

crontab文件格式:

[語法]:
*       *    *    *    *      command
minute hour day month week    command
[樣例]:
# 每2分鐘執(zhí)行一次mro.sh腳本 ,將執(zhí)行結果以追加的方式添加到mroLog.txt文件中
*/2 * * * * sh /app/dag/mroMove/mro.sh >> /app/dag/mroMove/mroLog.txt  2>&1  

crontab定時任務配置:

  • 使用crontab -e 進行定時任務添加
  • 使用crontab -l 查詢用戶定時任務

4、shell 按秒執(zhí)行

(1)通過sleep來實現

思路:

  • 將Shell腳本在后臺掛起執(zhí)行,在程序內部使用死循環(huán)執(zhí)行,每次循環(huán)之后sleep執(zhí)行的時間(秒)

樣例:

[腳本]:
#!/bin/bash
while :; do
    echo `date` >> /app/home/temp/dateLog.txt
    sleep 5
    done

[result]:
Mon May 11 10:41:28 CST 2020
Mon May 11 10:41:33 CST 2020
Mon May 11 10:41:38 CST 2020
Mon May 11 10:41:43 CST 2020
Mon May 11 10:41:48 CST 2020
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容