Linux下crontab使用方法,crontab使用經驗分享

來源:互聯網
上載者:User

聲明:本文章轉載自:http://www.taoyutaole.com/thread-1436-1-3.html


Linux下crontab使用方法,crontab使用經驗分享。

作為網站營運**師,經常要與crontab打交道,通過使用crontab自動運行定時任務從而達到自動化營運的目的。在我的日常工作中也深刻地感受到了crontab的方便、高效。
但是最近在使用crontab過程中,接連遇到頭疼的問題:手動執行指令碼時一點問題都沒有,可是放在crontab中指令碼死活也不運行。最後查出來原因一次是因為指令碼裡面檔案路徑沒有寫全路徑導致的,另一次是因為指令碼運行需要依賴java環境變數,其實兩次都是環境變數的問題造成的。從網上同樣瞭解到一般crontab無法啟動並執行問題都是由環境變數在crontab中不一定可識別引起的。某前輩總結說:crontab如果不注意的話早晚會出問題,而且這種問題一旦出一次,就會永遠記得,因為這種問題很折騰人。精闢啊~~
下面我也來試試總結下crontab的基本用法,環境變數以及其他要注意的問題。各位看官可以參考下,有什麼問題也可以留言討論。
————————————————————————————
1.crontab的基本用法
Usage: crontab [-u user] [-e|-l|-r]
Crontab 的格式說明如下:
* 逗號(‘,’) 指定列表值。如: “1,3,4,7,8″
* 中橫線(‘-’) 指定範圍值 如 “1-6″, 代表 “1,2,3,4,5,6″
* 星號 (‘*’) 代表所有可能的值
*/15 表示每 15 分鐘執行一次
# 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
2.crontab與環境變數
不要假定cron知道所需要的特殊環境,它其實並不知道。所以你要保證在shelll指令碼中提供所有必要的路徑和環境變數,除了一些自動化佈建的全域變數。所以注意如下3點:
1)指令碼中涉及檔案路徑時寫全域路徑;
2)指令碼執行要用到java或其他環境變數時,通過source命令引入環境變數,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)當手動執行指令碼OK,但是crontab死活不執行時。這時必須大膽懷疑是環境變數惹的禍,並可以嘗試在crontab中直接引入環境變數解決問題。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
3.其他應該注意的問題
1)新建立的cron job,不會馬上執行,至少要過2分鐘才執行。如果重啟cron則馬上執行。
2)每條 JOB 執行完畢之後,系統會自動將輸出發送郵件給當前系統使用者。日積月累,非常的多,甚至會撐爆整個系統。所以每條 JOB 命令後面進行重新導向處理是非常必要的: >/dev/null 2>&1 。前提是對 Job 中的命令需要正常輸出已經作了一定的處理, 比如追加到某個特定記錄檔。
3)當crontab突然失效時,可以嘗試/etc/init.d/crond restart解決問題。或者查看日誌看某個job有沒有執行/報錯tail -f /var/log/cron。
4)千萬別亂運行crontab -r。它從Crontab目錄(/var/spool/cron)中刪除使用者的Crontab檔案。刪除了該使用者的所有crontab都沒了。
5)在crontab中%是有特殊含義的,表示換行的意思。如果要用的話必須進行轉義\%,如經常用的date ‘+%Y%m%d’在crontab裡是不會執行的,應該換成date ‘+\%Y\%m\%d’`。
—————————————————————————————–
/etc/profile, /etc/bashrc, .bash_profile和.bashrc的差別
使用者登陸Linux作業系統的時候,”/etc/profile”, “~/.bash_profile”等設定檔會被自動執行。執行過程是這樣的:登陸Linux系統時,首先啟動”/etc/profile”,然後啟動使用者目錄下的”~/.bash_profile”,如果”~/.bash_login”和”~/.profile”檔案存在的時候也會在執行”~/.bash_profile”後被依次調用。
——————
cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATHHOME/bin
export PATH
alias vi=vim
通過上面指令碼可以看到~/.bash_profile檔案先調用~/.bashrc,然後再把PATH載入。
——————
下面是一些區別:
/etc/profile:此檔案為系統的每個使用者佈建環境資訊,當使用者第一次登入時,該檔案被執行,並從/etc/profile.d目錄的設定檔案中搜集shell的設定;
/etc/bashrc:為每一個運行bash shell的使用者執行此檔案,當bash shell被開啟時,該檔案被讀取;
~/.bash_profile:每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅僅執行一次!預設情況下,他設定一些環境變數,執行使用者的.bashrc檔案,
~/.bashrc:該檔案包含專用於你的bash shell的bash資訊,當登入時及每次開啟新的shell時,該檔案被讀取;
~/.bash_logout:當每次退出系統(退出bash shell)時,執行該檔案;
——–
/etc/profile是全域性的功能,其中設定的變數作用於所有使用者,~/.bash_profile中設定的變數能繼承/etc/profile中的變數並作用於使用者。
~/.bash_profile 是互動式、login 方式進入 bash 啟動並執行;~/.bashrc 是互動式 non-login 方式進入 bash 啟動並執行。

相關文章

聯繫我們

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