關於crontab定時任務執行失敗發送報錯郵件的問題


      前幾天,發現一個在服務器通過crontab執行的一個java程序,突然不執行了。后來經過排查,是由於運維在其他項目上線的時候,不知道什么原因,導致crontab中jar文件的執行,通過java -jar執行不了了,必須修改為java的全路徑/usr/java/jdk1.7.0_79/bin/java -jar才可以執行。原因因該是java的一些什么路徑問題,這個沒有具體去了解。

    就打算在程序中添加一個監控,不然程序掛了也不知道,必須數據出現問題了,才有可能發現問題。

  首先,在程序中添加監控是沒有用的(而且程序中本來就有監控的),因為是java路徑導致的問題,所以Java 程序根本就沒有執行,里面寫再多監控,程序不執行的話,也是沒用的啊。

  就想着crontab中是不是有監控的功能,畢竟這個是crontab任務執行失敗了,后來在網上發現了這篇文章

  http://my.oschina.net/abcfy2/blog/200351 

  我測試了一下 可以通過MAILTO定義一個自己的郵箱,來接收郵件。但是問題又來了,這個會把所有的stdout輸出都通過郵件發送給你,由於我的程序是會產生日志的。這就導致,程序每次執行,都會給我發送郵件,起不到想要的效果。

  然后就在網上找到了這篇文章

  http://blog.csdn.net/aderben/article/details/16841027

  看到這個地方:

**************************************************

先看一個例子:

0 2 * * * /u01/test.sh >/dev/null 2>&1 &

 

這句話的意思就是在后台執行這條命令,並將錯誤輸出2重定向到標准輸出1,然后將標准輸出1全部放到/dev/null 文件,也就是清空。

 

在這里有有幾個數字的意思:

       0表示鍵盤輸入

       1表示標准輸出

       2表示錯誤輸出.

********************************************************

 想到可不可以通過只有錯誤輸出的時候,才發送郵件呢? 經過測試,終於成功了,最終的命令這樣寫就可以了:

 

MAILTO=username1@mail.com,username2@mail.con(可以定義多個郵箱接受,逗號分割)

0,15,30,45 * * * * /usr/java/jdk1.7.0_79/bin/java -jar userjava.jar 2 > /dev/null 1>&1

意思是在執行程序的時候,只有錯誤輸出才會輸出(userjava.jar 2 >    這個2 定義的程序的錯誤輸出)   輸出到/dev/null 也就是清空   后面的1>&1表示前面程序的輸出結果 保存

 

 

 
 
 
 


免責聲明!

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



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