天天看點

linux計劃任務的作用,linux的計劃任務

檢視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