今天遠端檢查醫院上線的系統執行狀況時,發現xxl-job排程系統在沒有執行任務的情況下一直報錯,如下圖:
看這發生時間,每30秒一次,特別有規律,一開始以為是有任務在執行,因為引數是json格式的字串,封裝的時候出錯了導致轉換時報錯,但是檢查了一遍所有的任務,都不在執行的時間區間。
於是停掉了整個排程任務服務,將日誌改名後進行備份,重新啟動,發現一啟動服務就開始報錯,這下可神奇了。
private void retryfailcallbackfile()
if (callbacklogpath.isfile())
if (!(callbacklogpath.isdirectory() && callbacklogpath.list()!=null && callbacklogpath.list().length>0))
// load and clear file, retry
for (file callbacllogfile: callbacklogpath.listfiles())
}
/**
* 3、找到檔案路徑
*/
public static string getlogpath()
}原來是執行器終止的時候,會批量獲取**佇列裡的**入參集合,如果**入參集合不為空就會記錄當前任務執行日誌並生成日誌檔案。如果發生異常則會將**入參集合序列號為byte,然後在日誌根目錄下建立callbacklog
目錄,生成**失敗記錄檔案xxl-job-callback-.log
,將byte寫入**失敗日誌中進行儲存。最後新建乙個**重試守護執行緒,每隔30秒執行一次。當執行器啟動時,守護執行緒會去讀失敗日誌將byte轉為**入參物件集合,如果沒問題的話就會刪除日誌檔案並重新執行**方法。
所以問題就是,執行任務出現異常時將**入參集合轉為byte儲存到**日誌中,後面再拿到**日誌轉回byte的時候報錯了。
於是,我就找到這個路徑下的錯誤日誌,全部delete掉,服務就正常了。
參考《rabbitsinthegrass——分布式定時任務—xxl-job學習(二)——執行器的啟動過程原始碼分析》
ORACLE 定時任務沒有執行 解決
查詢 select value from v parameter where name like job queue processes 看看值是多少?下面是11g reference的描述 job queue processes 指定可以為執行dbms job作業和oracle scheduler...
oracle起定時任務,每隔1秒執行一次
建立乙個測試表和乙個儲存過程 create table a a date create orreplace procedure test as begin insert into a values sysdate end 定時任務樣板 declare job1 number begin dbms j...
linux新建自動任務沒有執行問題排查
在linux新建刪除日誌任務時,手動執行沒問題,用crontab e新建後一直沒執行,問題排查過程 1.檢視自動任務日誌 tailf var log cron 遇到的問題 failed to authorize user with pam module is unknown 解決 重啟crond e...