linux基礎(四)——任務排程cron和anacron

愛吃串串的瘦子發表於2018-07-20

crontab定期執行shell指令碼

【場景】:

需要定期執行Hadoop的MapReduce

 

【解決辦法】:

編寫一個執行MapReduce的Shell指令碼。然後使用crontab配置定時任務。

 

【Shell指令碼】

#!/usr/bin/env bash
source /etc/profile
echo "TimeLimitDrawn Start"
hadoop jar $HADOOP_HOME/package/mr_post-1.0-SNAPSHOT-jar-with-dependencies.jar com.hdyh.mapreduce.TimeLimitDrawn >> /home/hadmin/hadoop/shell/mr.log
echo "TimeLimitDrawn End"

 

【定時任務】

*  *  */1  *  *  sh /home/hadmin/hadoop/package/TimeLimitDraw.sh

 

【crontab使用說明】

crontab –u    //設定某個使用者的cron服務,一般root使用者在執行這個命令的時候需要此引數
crontab –l     //列出某個使用者cron服務的詳細內容
crontab –r    //刪除某個使用者的cron服務
crontab –e    //編輯某個使用者的cron服務

 

crontab 檔案中的行由6個欄位組成,不同欄位間用空格或tab鍵分隔。前5個欄位指定命令要執行的時間
①分鐘(0-59)
②小時(0-23)
③日期(1-31)
④月份(1-12)
⑤星期幾(0-6,其中0代表星期日,好像7也代表星期日)
⑥一個要在適當時間執行的字串。

例子:
#MIN      HOUR     DAY       MONTH  DAYOFWEEK       COMMAND
#每天早上6點10分
10    6     *     *     *     date

#每兩個小時
0     */2   *     *     *     date

#晚上11點到早上8點之間每兩個小時,早上8點
0     23-7/2,8      *     *     *     date

#每個月的4號和每個禮拜一到禮拜三的早上11點
0     11    4     *     1-3  date

#1月1日早上4點
0     4     1     1       *  date

 

讓配置檔案生效:如果讓配置檔案生效,還得重新啟動cron,切記,既然每個使用者下的cron配置檔案修改後,也要重新啟動cron伺服器。

 

注意:如果要定期執行某個Shell命令的時候,一定要注意以下兩點:

①、shell指令碼要有-x(可執行)的許可權

②、shell指令碼可以被正確執行,但是hadoop命令無法執行時,多數情況都是因為環境變數的原因,可以在Shell指令碼中使用source /etc/profile來使環境變數生效。

③、如果設定的是整點執行,按照下面錯誤的寫法,會在7點開始執行很多次命令。

錯誤的寫法:*  7  *  *  *  sh /home/hadmin/hadoop/package/TimeLimitDraw.sh

正確的寫法:0  7  *  *  *  sh /home/hadmin/hadoop/package/TimeLimitDraw.sh

④、有時因為找不到檔案或者許可權問題無法正確執行時,系統會生成一個檔案【/var/spool/mail/[使用者名稱]】、 如:/var/spool/mail/root

在這個檔案中有時可以找到一些有用的線索。

相關文章