1. 程式人生 > >Linux(centos 6.5) 調用java腳本以及定時運行的腳本實例及配置文件具體解釋

Linux(centos 6.5) 調用java腳本以及定時運行的腳本實例及配置文件具體解釋

-name entos profile 6.0 主函數 lan 默認 java類 屬性

Linux(centos 6.5) 調用java腳本以及定時運行的腳本實例
一、調用java程序腳本(默認已經搭建好了Java環境)

1、jdk 安裝路徑 /usr/jdk/jdk1.7/……
2、java 程序路徑 /usr/jdk
3、類名:Test.java(有主函數的類名)
4、調用java類的腳本,註意腳本的後綴是.sh
5、腳本內容:
(1)#!

/bin/bash
// #! 特殊符號。說明這個腳本是由/bin 文件夾下的bash這個shell來解釋並將解釋後的內容給kernel來運行
(2)cd /usr/jdk
(3)/usr/jdk/jdk1.7/bin/javac Test.java
(4)/usr/jdk/jdk1.7/bin/java Test
6、腳本名稱: testshell.sh
7、運行這個腳本來編譯java程序,解釋運行jvm機器碼

8、運行腳本command: sh testshell.sh


二、定時運行任務

1、linux有個系統級的定時任務服務。叫cron,終端裏的命令是crontab。使用他就能夠定時運行腳本

2、編寫定時任務的文件叫crontab 在 /etc/文件夾下

3、打開方式有兩種。一種是用戶級別,一種是系統級別:crontab -e 用戶級別 vim crontab 系統級別

4、有兩種打開方式也就有兩種查看方式。crontab -l 查看用戶級別的定時任務 more /less/tail/head 查看系統級別的任務

5、crontab文件裏定義的一些 屬性:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
(1)、SHELL變量指定了系統要使用哪個shell,這裏是bash。

(2)、PATH變量指定了系統運行命令的路徑。

(3)、MAILTO變量指定了crond的任務運行信息將通過電子郵件發送給root用戶,假設MAILTO變量的值為空,則表示不發送任務運行信息給用戶。

(4)、HOME變量指定了在運行命令或者腳本時使用的主文件夾。

6、定時任務的格式: crontab中的一個實例,這裏是使用vim 編輯的所以是系統級的
# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
* * * * * root sh /usr/jdk/testshell.sh

*/1 * * * * root sh /usr/jdk/testshell.sh

解釋: 通過crontab 自帶的這個我們能夠清晰的看到定時任務的格式,所以就不多說了。 上面自定義的兩個任務都是每一分鐘運行一次任務,而用戶是root

上面是沒一分鐘運行一次:

以下是每小時運行一次:

0 * * * * rootsh /usr/jdk/testshell.sh // 每小時的0 分鐘運行

0 */1 * * * rootsh /usr/jdk/testshell.sh // 每小時的0 分鐘運行

這兩種方式都是定義每一小時的“0”分鐘運行一次。

當然兩小時一次也一樣:0 */2 * * * rootsh /usr/jdk/testshell.sh

* */2 * * * rootsh /usr/jdk/testshell.sh 這樣的方式有的沒問題有的沒有問題註意使用

在指定的時間範圍內每幾分鐘運行一次:

*/10 4-18 * * * root sh/usr/jdk/testshell.sh // 從淩晨4點到下午6點每10分鐘運行一次。

每一天的指定時間運行一次:

0 0 * * * rootsh /usr/jdk/testshell.sh // 每天的0點 0 分運行一次

10 14 * * * rootsh /usr/jdk/testshell.sh // 每天的14點10分運行一次

10 10,11,14 root sh /usr/jdk/testshell.sh // 每天的10、11、14點10分運行一次

每周指定日期時間運行一次:

0 0 * * 0 rootsh /usr/jdk/testshell.sh // 每周日的0點0分運行一次

01 19 * * 1 rootsh /usr/jdk/testshell.sh // 每周一的19點1分運行一次
10 15 * *5 rootsh /usr/jdk/testshell.sh // 每周五的15點10分運行一次

註意:0 和7 表示的的是周日

每月指定日期時間運行一次:

0 0 1 * * root sh /usr/jdk/testshell.sh // 每月的第1天的0時0分運行一次
15 14 20 * * root sh /usr/jdk/testshell.sh // 每月的第20天的14點15分運行一次

7、 到這裏定時任務就完畢了,但不一定會成功運行,以下說說像我這樣的菜鳥會常常犯的錯誤

8、假設定義後沒有運行定時任務。則能夠去/var/spool/mail 查看 對應的日誌,假設報錯則說明腳本寫的有問題,註意這裏出錯概率比較大的就是路徑的問題,所以在寫腳本的時候能夠寫全路徑來試試。

9、假設沒報錯,則說明沒有運行定時任務。cron是一個linux下的定時運行工具,能夠在無需人工幹預的情況下運行作業。因為Cron 是Linux的內置服務,但它不自己主動起來,能夠用下面的方法啟動、關閉這個服務:

/sbin/service crond start //啟動服務

/sbin/service crond stop //關閉服務

/sbin/service crond restart //重新啟動服務

/sbin/service crond reload //又一次加載配置

10、你也能夠將這個服務在系統啟動的時候自己主動啟動:

在/etc/rc.d/rc.local這個腳本的末尾加上:

/sbin/service crond start


11、時間的設定:

分鐘 (0-59)

小時 (0-23)

日期 (1-31)

月份 (1-12)

星期 (0-6)//0代表星期天

除了數字還有幾個個特殊的符號就是"*"、"/"和"-"、","。*代表全部的取值範圍內的數字,"/"代表每的意思,"*/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字


三、在寫調用java的程序腳本時會有個 -cp 這個是幹嘛的那,那我們來看看:

1、-cP :解說
由於我們自己寫的java程序要執行。可能要包括除java.lang.*外的其他類或類庫。使用-cp能夠指定這些類庫或類。
java -cp c:\dir1\lib.jar Test
-cp 和 -classpath 一樣。是指定類執行所依賴其它類的路徑,一般是類庫。jar包之類,須要全路徑到jar包。window上分號“;”而linux 下去是“:” 有差別的註意

2、完整實例展示:

source /home/newsgroup/.bash_profile
LANG=zh_CN
export LANG
cd /www/autopublish.news.fang.com/auto_publishnews/bin
/usr/java/jdk1.6.0_35/bin/java -cp .:../lib/commons-httpclient-3.1.jar:../lib/commons-logging.jar:../lib/jdom.jar:../lib/log4j-1.2.8.jar:../lib/sqljdbc4.jar

com.fang.autopub/NewsAutoPublishing


3、實例分析:

(1)、

source命令使用方法:
source FileName
作用:在當前bash環境下讀取並運行FileName中的命令。


註:該命令通經常使用命令“.”來替代。
如:source .bash_rc 與 . .bash_rc 是等效的。
註意:source命令與shell scripts的差別是:
source在當前bash環境下運行命令而scripts是啟動一個子shell來運行命令。這樣假設把環境變量設置(或alias等等)的命令寫進scripts中,就僅僅會影響子shell,無法改變當前的BASH,所以通過文件(命令列)環境變量設置時,要用source 命令。


(2)、
export AAA="hello"
僅僅是把這個變量載入到內存中,而並沒有寫入哪個文件。

就像ifconfig eth0 192.168.1.100 up一樣,僅僅是對內存進行操作,沒有寫入到磁盤上,而註銷或重新啟動之後,系統載入的磁盤上的文件。
要想把他變成永久性的須要把他加入到開機啟動的腳本中。/etc/profile、/etc/bashrc等式“全局”。開機之後自己主動載入。全部用戶共享著些文件。

而每一個用戶的家文件夾下的 .bashrc、.barsh_profile等腳本是“局部”的,僅僅對該用戶有效。這樣就滿足了各個用戶不同的需求。

(3)、

-cp 指定了這些包所在的詳細路徑

最以下的包名稱+ 類名稱組成完整的路徑,可是你會發現。包名稱和類名稱之間不是使用“,” 而是“/”



四、錯誤分析:

寫的腳本有可能一次不會成功,所以我們要對錯誤進行分析。而crontab 中的定時任務有沒有運行怎麽查看那,詳細例如以下:

1、查看日誌,有沒有運行你寫的定時任務。日誌路徑: /var/log/cron 這個就是定時任務的日誌,打開後假設能看到你的命令在日誌中說明定時任務運行了。錯誤來自你寫的腳本

2、假設日誌文件裏沒有。則說明沒有運行你的定時任務,這時我們要重新啟動crond服務: /etc/init.d/crond restart


總結:在 Linux 底下的 crontab 會自己主動的幫我們每分鐘又一次讀取一次 /etc/crontab 的例行工作事項。可是某些原因或者是其他的 Unix 系統中,因為 crontab 是讀到內存其中的,所以在你改動完 /etc/crontab 之後,可能並不會立即運行。這個時候請又一次啟動 crond 這個服務即 /etc/init.d/crond.


Linux(centos 6.5) 調用java腳本以及定時運行的腳本實例及配置文件具體解釋