linux 自動執行 crontab學習筆記

來源:互聯網
上載者:User
在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 defaultcrontab -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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.