歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

linux 自動執行 crontab學習筆記

在linux平台上如果需要實現任務調度功能可以編寫cron腳本來實現。 以某一頻率執行任務 linux缺省會啟動crond進程,crond進程不需要用戶啟動、關閉。 
crond進程負責讀取調度任務並執行,用戶只需要將相應的調度腳本寫入cron的調度配置文件中。 
cron的調度文件有以下幾個:
  1. crontab
  2. cron.d
  3. cron.daily
  4. cron.hourly
  5. cron.monthly
  6. cron.weekly
如果用的任務不是以hourly monthly weekly方式執行,則可以將相應的crontab寫入到crontab 或cron.d目錄中。 示例: 
每隔一分鐘執行一次腳本 /opt/bin/test-cron.sh 
可以在cron.d新建腳本 echo-date.sh 
內容為 */1 * * * * root  /opt/bin/test-cron.sh 在指定的時間運行任務 也可以通過at命令來控制在指定的時間運行任務 如: at -f test-cron.sh -v 10:25 
其中-f 指定腳本文件, -v 指定運行時間 quote:ea946d690b="lophyxp"]首先用
contab -l >contabs.tmp
導出contab的配置。
然後編輯contabs.tmp文件。以一下格式添加一行:
分鐘 小時 天 月 星期 命令
比如
10 3 * * 0,6 hello
就是每周六、周日的3點10分執行hello程序。
15 4 * * 4-6 hello
就是從周四到周六的4點15點執行hello程序。
然後用
contab contabs.tmp
命令導入新的配置。
一般不建議直接修改/etc/下的相關配置文件。 啟動cron進程的方法:/etc/init.d/crond start 
開機就啟動cron進程的設置命令:chkconfig --add crond 方法二: 把cron加入到啟動腳本中: # rc-update add vixie-cron default crontab -l #查看你的任務 crontab-e#編輯你的任務 crontab-r#刪除用戶的crontab的內容 實例講解二: 系統cron設定:/etc/crontab 
    通過 /etc/crontab 文件,可以設定系統定期執行的任務,當然,要想編輯這個文件,得有root權限 0 7   *    *   *    root    mpg123 ~/wakeup.mp3 
分 時 日 月 周 示例: 0 4  * * 0     root emerge --sync && emerge -uD world              #每周日凌晨4點,更新系統 
0 2 1 * *     root   rm -f /tmp/*                                                    #每月1號凌晨2點,清理/tmp下的文件 
0 8 6 5 *   root     mail  robin < /home/galeki/happy.txt             #每年5月6日給robin發信祝他生日快樂 假如,我想每隔2分鐘就要執行某個命令,或者我想在每天的6點、12點、18點執行命令,諸如此類的周期,可以通過 “ / ” 和 “ , ” 來設置: */2   *   *   *   *           root      ...............      #每兩分鐘就執行........ 
0 6,12,18   *   *   *    root      ...............      #每天6點、12點、18點執行........ 每兩個小時 0 */2 * * * echo "have a break now." >&gt; /tmp/test.txt 晚上11點到早上8點之間每兩個小時,早上八點 0 23-7/2,8 * * * echo "have a good dream:)" &gt;&gt; /tmp/test.txt 每個月的4號與每個禮拜的禮拜一到禮拜三的早上11點 0 11 4 * 1-3 command line 1月1日早上4點 0 4 1 1 * command line 收獲:可以把經常要做的一些事放到其中,簡化工作量,如每周一檢查服務器的運行狀態,查看報告,殺掉一些進程等等……


 

 

關於 Crontab ,維基百科上的詞條 Crontab非常好。可惜這個地址在國內不用代理訪問不到。

雖然關於 Crontab 的介紹到處都是,詳細讀了一遍這個詞條,收獲還是有的。Crontab 這個名字來自 "chronos",一個古希臘語, “時間”的意思.

常見陷阱

每個SA、DBA 或者是普通的 Unix 用戶,在第一次使用 Crontab 的時候都會遇到問題. 運行 Crontab 的常見錯誤包括如下幾種:

1) 出於測試目的新創建了一條 Cron JOB, 時間間隔必須超過兩分鐘,否則 JOB 將調度不到。如果必須忽略這兩分鐘的載入配置時間差,可以通過重新啟動 Cron Daemon 做到。

2) 從 Crontab 中啟動 X Window 程序需要注意的事項:所以要麼在程序前初始化 "DISPLAY=:0.0", 要麼在應用程序後面追加參數 --display :0.0

3) 命令中的 % 必須做轉義處理: \% .我個人的意見是不要在命令行裡帶這個參數,干脆寫到腳本裡,然後調度該腳本即可。

其實我倒是認為使用 Crontab 最常見的一個問題往往是因為環境變量不對。經常會看到論壇裡有人問:為什麼我的 Crontab 創建了不執行? 准備創建一條 Cron JOB 的時候,很多人都喜歡在命令行下運行一遍,因為這個時候環境變量是隨著 Shell 自動帶進來,在 Crontab 中則可能因為找不到正確的環境變量,JOB 就不能執行。這個小問題就像出天花,一次教訓之後就都記得了。

必須使用的一則技巧

每條 JOB 執行完畢之後,系統會自動將輸出發送郵件給當前系統用戶。日積月累,非常的多,甚至會撐爆整個系統。所以每條 JOB 命令後面進行重定向處理是非常必要的: >/dev/null 2>&1 。前提是對 Job 中的命令需要正常輸出已經作了一定的處理, 比如追加到某個特定日志文件。

附: Crontab 的格式說明如下:

* 逗號(',') 指定列表值。如: "1,3,4,7,8"
* 中橫線('-') 指定范圍值 如 "1-6", 代表 "1,2,3,4,5,6"
* 星號 ('*') 代表所有可能的值

Linux(開源系統似乎都可以)下還有個 "/" 可以用. 在 Minute 字段上,*/15 表示每 15 分鐘執行一次. 而這個特性在商業 Unix ,比如 AIX 上就沒有.

# Use the hash sign to prefix a comment 
# +---------------- minute (0 - 59)
# | +------------- hour (0 - 23)
# | | +---------- day of month (1 - 31)
# | | | +------- month (1 - 12)
# | | | | +---- day of week (0 - 7) (Sunday=0 or 7)
# | | | | | # * * * * * command to be executed
Copyright © Linux教程網 All Rights Reserved