使用crond和at 在linux中定時執行任務

來源:互聯網
上載者:User

一. 使用cron來定期執行任務

首先確認crond服務是否開啟:
$service crond status
如果沒有開啟請開啟,
$service crond start

1、迴圈執行的計劃任務linux下面有atd和crond兩種計劃任務,其中,atd服務使用的at命令只能執行一次,而crond服務使用的crontab定義的命令,是迴圈作用的,所以crond才符合我們的要求。
crontab支援兩種狀態:一、直接編寫計劃任務;二、使用目錄的方式,放在目錄裡面的都會定時執行

2、可以使用的使用者
預設情況下,系統中可以登陸的使用者,都可以使用crontab定義計劃任務。不過,可以通過下面兩個檔案限制許可權:
/etc/cron.allow:將可以使用 crontab 的帳號寫入其中,若不在這個檔案內的使用者則不能使用 crontab;
/etc/cron.deny:將不可以使用 crontab 的帳號寫入其中,若未記錄到這個檔案當中的使用者,就可以使用 crontab。
類似TCPWrapper定義的方式。

3、直接使用crontab編輯計劃任務:
命令:crontab [-u username] [-l|-e|-r]
參數:-u :通過-u幫其它使用者建立/移除 crontab;
-e :編輯 crontab 的內容
-l :查看 crontab 的內容
-r :移除 crontab 的所有內容(是全部的內容,如果只是刪除某個,用-e編輯即可)
內容格式:* * * * * 命令前面的五個*號,表示分、時、日、月、周,
如:代表意義 分鐘 小時 日期 月份 周
數字範圍 0-59 0-23 1-31 1-12 0-7

*號代表任何時間都接受的意思,任意。*號之間用空格分開,如果是一段範圍,用-號串連;如果是隔開幾個時間,用,號表示。另外,命令必須是編寫計劃任務的使用者有許可權執行的,並且最後用絕對路徑。

例如:#crontab -e59 23 1 5 * mail linuxing < /home/test.txt
每在5月1日,23點59分就把/home/test.txt的內容作為郵件發給linuxing使用者
*/5 * * * * /opt/test.sh每5分鐘就執行一次/opt/test.sh指令碼
0 3,6 * * * /usr/local/bin/test.sh每在3點和6點整點都執行/usr/local/bin/test.sh命令
0 8-12 * * * /root/backup.sh8 點到 12 點之間的每小時的0分都執行/root/backup.sh

4、基於目錄的方式執行計劃任務對於系統的計劃任務,已經在/etc/crontab裡面定義,採用的就是基於目錄的方式。系統會定時讀取該檔案,並根據裡面的定義執行命令。可以使用vi直接編寫/etc/crontab檔案,其中格式如下:
#cat /etc/crontab
SHELL=/bin/bash #使用的shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin #預定義的PATH路徑
MAILTO=root #出現問題發Email給該使用者
HOME=/ #家目錄

# run-parts
01 * * * * root run-parts /etc/cron.hourly #每小時的目錄
02 4 * * * root run-parts /etc/cron.daily #每天
22 4 * * 0 root run-parts /etc/cron.weekly #每周日
42 4 1 * * root run-parts /etc/cron.monthly #每個月1號
分 時 日 月 周 執行者 命令

可以看到前面的五個參數的定義和直接編輯計劃任務是一樣的,增加了執行的使用者定義和run-parts參數。
run-parts後面跟的是目錄名稱,例如:/etc/cron.hourly,表示每小時01分就到/etc/cron.hourly目錄中執行目錄下的所有可執行檔案;當然,目錄是可以自己定義的。

如果需要增加系統的計劃任務,只需要在對應的目錄添加執行檔案即可,例如:需要在每天都執行updatedb的操作,則只需要把/usr/bin/updatedb的執行命令連結到/etc/cron.daily目錄就可以了。

同樣的,如果不需要使用目錄的方式,也可以使用如下的方式:
02 01 * * * root /root/test.sh
也就是沒有了run-parts,後面就直接跟命令的絕對路徑

5、注意事項如果使用crontab編輯計劃任務或直接修改/etc/crontab檔案後,計劃任務沒有生效,可能需要重啟一下crond服務:
service crond restart

當編寫/etc/crontab檔案的時候,不要漏了指定執行計劃任務的使用者,這是和直接用crontab -e編輯不同的。某使用者(如root)用crontab -e編輯的計劃任務存放在/var/spool/cron/root,這個檔案下。但最好不要直接編輯他,因為crond執行的時候,會在/tmp目錄中建立需要的臨時檔案,直接編輯會對此有影響,甚至出錯。

cron執行的每一項工作都會被紀錄到/var/log/cron這個記錄檔中,可以從這個檔案查看命令執行的狀態

二、 使用at命令定期運行程式
1. 使用cron運行任務
cron任務的缺點是計劃要經常運行,假如我們只是想要讓特定任務運行一次呢?那麼,這時候就要用到at監控程式了。
設定at命令很簡單,指示定啟動並執行時間,那麼就會在哪個時候運行。at類似列印進程,會把任務放到/var/spool/at目錄中,到指定時間運行它
。at命令相當於另一個shell,運行at time命令時,它發送一個個命令,可以輸入任意命令或者程式。at now + time命令可以在指示任務。
假設處理一個大型資料庫,要在別人不用系統時去處理資料,比如淩晨2點5分。那麼我們就應該先建立/home/mj/airplane指令碼管理資料庫,計
劃處理/home/mj/air-safe檔案中的結果。正常方式是這樣啟動下列命令:
# at 2:05 tomorrow
at> /home/mj/airplane > /home/mj/air-safe
at> Ctrl+D
AT Time中的時間表示方法
-----------------------------------------------------------------------
時間 例子 說明
-----------------------------------------------------------------------
Minute at now + 5 minutes 任務在5分鐘後運行
Hour at now + 1 hour 任務在1小時後運行
Days at now + 3 days 任務在3天后運行
Weeks at now + 2 weeks 任務在兩周后運行
Fixed at midnight 任務在午夜運行
Fixed at 10:30pm 任務在晚上10點3

三.定期刪除例子

#!/bin/sh
# A Shell Scrip to delete the regular file in EXP_PATH whose name like NAME
# and modified TIME days ago!

#the path of the file that you want to delete
EXP_PATH="/var/spool/asterisk/voicemail/"
#what does the name of the file that you want to delete like?
NAME="*"
#beyond how many days?
TIME=10
#log file ---
LOG_DEL="./voicemail.log"

echo "*******************************" >> $LOG_DEL
date >> $LOG_DEL
echo "*******************************" >> $LOG_DEL
find $EXP_PATH -type 'f' -mtime +$TIME -name "$NAME" -print -exec rm {} ; >> $LOG_DEL
echo " " >> $LOG_DEL

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.