Linux crontab定時器設置(定期執行java程序)(轉)


Crontab 語法
Crontab語法一個crontab文件用五個段來定義:天,日期和時間,和一個要定期執行的命令代碼。
*    *  *  *   *  command to be executed
-    -   -   -    -
|    |    |    |    |
|    |    |    |    +----- day of week (0 - 6) (Sunday=0)
|    |    |    +------- month (1 - 12)
|    |    +--------- day of month (1 - 31)
|    +----------- hour (0 - 23)
+------------- min (0 - 59)

 

 

 

環境:

     RedHat Linux
     JDK1.6

功能說明:

     每天早上2點鍾執行一次java程序。

操作步驟:

     1、首先,將java程序打包成為jar包,包名為unarchivegzipandinsertintodb2_0_1.jar,注意要設置該jar包的MANIFEST.MF的Main-Class的類,
        將jar包復制到/usr/local/目錄下,同時將該jar包所依賴的jar包也復制到/usr/local/目錄下,如test.jar;
     2、在/usr/local/目錄下創建shell腳本,腳本名稱auto.sh,腳本內容為:
          #!/bin/bash 
   cd /usr/local/
#!/bin/sh
cd `dirname $0`
 /usr/local/jdk1.6.0_25/bin/java -Xms256M -Xmx1024M -cp  /usr/local/jdk1.6.0_25/lib/tools.jar:/usr/local/jdk1.6.0_25/lib/dt.jar:/data/appLog/UnArchiveGzipAndInsertIntoDB2_0.1/UnArchiveGzipAndInsertIntoDB2/../lib/activation.jar:/data/appLog/UnArchiveGzipAndInsertIntoDB2_0.1/UnArchiveGzipAndInsertIntoDB2/../lib/advancedPersistentLookupLib-1.0.jar:/data/appLog/UnArchiveGzipAndInsertIntoDB2_0.1/UnArchiveGzipAndInsertIntoDB2:/data/appLog/UnArchiveGzipAndInsertIntoDB2_0.1/UnArchiveGzipAndInsertIntoDB2/../lib/systemRoutines.jar:/data/appLog/UnArchiveGzipAndInsertIntoDB2_0.1/UnArchiveGzipAndInsertIntoDB2/../lib/test.jar::.:/data/appLog/UnArchiveGzipAndInsertIntoDB2_0.1/UnArchiveGzipAndInsertIntoDB2/unarchivegzipandinsertintodb2_0_1.jar: test.unarchivegzipandinsertintodb2_0_1.UnArchiveGzipAndInsertIntoDB2 --context=Default "$@" 
    
     說明:
     /usr/java/jdk1.6/是java安裝路徑
     java命令后面必須要加入-cp參數,cron在執行時不加載系統環境變量,如果不加這個參數,程序不會正常執行,
         即使命令行可以正確執行,但在cron調用時也會出現問題。
     
     3、使用crontab命令,輸入如下內容:
     00 02 * * * /usr/local/unarchivegzipandinsertintodb2_0_1.sh   
     說明:
     每天早上兩點鍾執行/usr/local/unarchivegzipandinsertintodb2_0_1.sh腳本,crontab的語法格式表達的含義可以參考相關手冊。
     
     最近經常碰到關於crontab不能執行的,初步總結了有以下幾個原因:

第一,腳本的原因:大多數情況下,我們要相信科學,相信計算機,不是有鬼,就是我們的腳本的問題,這種問題導致crontab不能執行的概率占到 70%以上。因為程序執行到某一步導致crontab終止執行,我就碰到一次在遷移代碼的時候將數據庫連錯了。導致無法訪問而死在那里了。

第二,執行環境問題,當我們碰到第一情況下,一般都可以通過手動執行程序將問題扼殺在搖籃里,一般情況下高手是不應該犯第一種錯誤的。問題是當我們 手動執行成功而crontab不能執行的時候,筆者碰到一次就是執行環境的問題,例如相關路徑的設置問題。解決方案:在代碼最前面執行 source /home/user/.bash_profile

第三,系統時間不正確。這種問題最好理解,也是比較常見和隱蔽的問題,解決方案:date -s ********

第四,就是我們的腳本是否有可執行權限。必須保證執行腳本的用戶有執行改文件的權限。

第五,crontab 守護進程死掉了。這種情況是極少發生的,但也不排除,當我們實在是找不到其他原因的時候可以用。解決方案:重啟該進程。

 

另外,介紹大家一個關於如何查看crontab最修修改時間的方法:

進入目錄/var/spool/cron/里面會有N個用戶名為文件名的文件,只要建立過crontab的用戶在這里都會有以該用戶名為文件名的文件,該文件的最后修改時間就是該用戶的的crontab的最后修改時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM