檢視cron是否啟動
[[email protected] ~]# ps -aux | grep cron
root 807 0.0 0.0 126292 1604 ? Ss 11:11 0:00 /usr/sbin/crond -n
root 16740 0.0 0.0 112712 964 pts/0 R+ 19:39 0:00 grep --color=auto cron
建立計劃任務
指令格式如下:
* * * * * command
第一個 * : minute (0-59)
第二個 * : hour(0-23)
第三個 * : day of month (1-31)
第四個 * : month (1-12)
第五個 * : day od week (0-6)
command : 具體執行任務的指令
建立方式
crontab -e
# 如: 每分鐘在 /home 目錄下建立一個以目前的年月日時分秒為名字的空白檔案
*/1 * * * * touch /home/$(date +\%Y\%m\%d\%H\%M\%S)
說明
“ % ” 在 crontab 檔案中,有結束指令行、換行、重定向的作用,前面加 “ ” 符号轉義,
否則,“ % ” 符号将執行其結束指令行或者換行的作用,并且其後的内容會被做為标準輸入發送給前面的指令
檢視計劃任務
[[email protected] ~]# crontab -l
*/1 * * * * touch /home/$(date +\%Y\%m\%d\%H\%M\%S)
檢視cron是否已啟動
ps -aux | grep cron
或者
pgrep cron
[[email protected] ~]# ps -aux | grep cron
root 807 0.0 0.0 126292 1604 ? Ss 11:11 0:00 /usr/sbin/crond -n
root 17154 0.0 0.0 112712 964 pts/0 R+ 19:47 0:00 grep --color=auto cron
檢視執行結果
[[email protected] ~]# ll /home/
total 0
-rw-r--r-- 1 root root 0 Nov 6 19:48 20191106194801
-rw-r--r-- 1 root root 0 Nov 6 19:49 20191106194901
-rw-r--r-- 1 root root 0 Nov 6 19:50 20191106195001
-rw-r--r-- 1 root root 0 Nov 6 19:51 20191106195101
-rw-r--r-- 1 root root 0 Nov 6 19:52 20191106195201
-rw-r--r-- 1 root root 0 Nov 6 19:53 20191106195301
-rw-r--r-- 1 root root 0 Nov 6 19:54 20191106195401
檢視執行日志
[[email protected] ~]# tail -f /var/log/cron
Nov 6 19:47:15 localhost crontab[17104]: (root) END EDIT (root)
Nov 6 19:47:35 localhost crontab[17141]: (root) LIST (root)
Nov 6 19:48:01 localhost CROND[17166]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov 6 19:49:01 localhost CROND[17219]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov 6 19:50:01 localhost CROND[17273]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov 6 19:51:01 localhost CROND[17327]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov 6 19:52:01 localhost CROND[17380]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov 6 19:53:01 localhost CROND[17433]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov 6 19:54:01 localhost CROND[17486]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
Nov 6 19:55:01 localhost CROND[17540]: (root) CMD (touch /home/$(date +%Y%m%d%H%M%S))
删除計劃任務
# 删除任務計劃
[[email protected] ~]# crontab -r
# 檢視任務計劃
[[email protected] ~]# crontab -l
no crontab for root
每個使用者使用crontab -e 建立計劃任務後,會在 /var/spool/cron/ 中添加一個該使用者自己的計劃任務文檔,目的是為了隔離。
[[email protected] ~]# ll /var/spool/cron/
total 8
-rw------- 1 lee lee 56 Nov 6 19:58 lee
-rw------- 1 root root 52 Nov 6 20:00 root
cron服務檢測時間的最小機關是分鐘,是以cron 會每分鐘去讀一次 /etc/crontab 和 /var/spool/cron/ 裡的内容
[[email protected] ~]# ll /etc/ | grep cron
-rw------- 1 root root 541 Aug 9 07:07 anacrontab
drwxr-xr-x. 2 root root 21 Oct 14 16:11 cron.d
drwxr-xr-x. 2 root root 42 Mar 6 2019 cron.daily
-rw------- 1 root root 0 Aug 9 07:07 cron.deny
drwxr-xr-x. 2 root root 22 Oct 14 16:11 cron.hourly
drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.monthly
-rw-r--r--. 1 root root 451 Jun 10 2014 crontab
drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.weekly
上面的目錄的作用:
/etc/cron.daily,目錄下的腳本會每天執行一次,在每天的6點25分時運作;
/etc/cron.hourly,目錄下的腳本會每個小時執行一次,在每小時的17分鐘時運作;
/etc/cron.monthly,目錄下的腳本會每月執行一次,在每月1号的6點52分時運作;
/etc/cron.weekly,目錄下的腳本會每周執行一次,在每周第七天的6點47分時運作;
系統預設執行時間可以根據需求進行修改
舉例1、備份日志
每天3點備份 /home/logs/user.log 檔案到 /data/logs/目錄下,并删除前一天的日志,備份的日志檔案名是年-月-日的格式
執行:
crontab -e
0 3 * * * rm /data/logs/*
0 3 * * * cp /home/logs/user.log /data/logs/$(date +\%Y-\%m-\%d)
舉例2、上傳檔案
每天2點通過sftp的方式上傳一個檔案到其他伺服器上
編寫執行腳本 upload.sh
#!/bin/bash
# SFTP配置資訊
# IP
IP=10.20.0.101
# 端口
PORT=22
# 使用者名
USER=lee
# 密碼
PASSWORD=111111
# 需要上傳的檔案名 (檔案名為user-前一天日期.csv (如user-2019-11-07.csv))
FILE=user-$(date -d -1day +%Y-%m-%d).csv
# 需要上傳的檔案所在目錄
CLIENTDIR=/home/
# 上傳到目标伺服器的目錄
SEVERDIR=./share/
lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT} <
cd ${SEVERDIR}/
lcd ${CLIENTDIR}
put ${FILE}
by
EOF
建立計劃任務
crontab -e
添加一下内容
0 2 * * * sh /home/uploadFile.sh