linux的計劃任務 - cron
阿新 • • 發佈:2020-09-16
檢視cron是否啟動
[root@localhost ~]# 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 檔案中,有結束命令列、換行、重定向的作用,前面加 “ \ ” 符號轉義,
否則,“ % ” 符號將執行其結束命令列或者換行的作用,並且其後的內容會被做為標準輸入傳送給前面的命令
檢視計劃任務
[root@localhost ~]# crontab -l */1 * * * * touch /home/$(date +\%Y\%m\%d\%H\%M\%S)
檢視cron是否已啟動
ps -aux | grep cron
或者
pgrep cron
[root@localhost ~]# 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
檢視執行結果
[root@localhost ~]# 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
檢視執行日誌
[root@localhost ~]# 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))
刪除計劃任務
# 刪除任務計劃
[root@localhost ~]# crontab -r
# 檢視任務計劃
[root@localhost ~]# crontab -l
no crontab for root
每個使用者使用crontab -e 建立計劃任務後,會在 /var/spool/cron/ 中新增一個該使用者自己的計劃任務文件,目的是為了隔離。
[root@localhost ~]# 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/ 裡的內容
[root@localhost ~]# 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} <<EOF
cd ${SEVERDIR}/
lcd ${CLIENTDIR}
put ${FILE}
by
EOF
建立計劃任務
crontab -e
新增一下內容
0 2 * * * sh /home/uploadFile.sh