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