2016-08-23 66 views
1

我使用寫一個cron作業我的crontab文件下面的Java代碼寫一個cron作業prgrammatically到crontab文件不運行

PrintWriter writer = new PrintWriter("/var/spool/cron/crontabs/multi","UTF-8"); 
     String cronTabString="25 13 * * * sudo wget --tries=0 \"https://some-url.com:7443/DataUpdater/updateChildren?folderId="+folderId+"&clientId="+clientId+"&clientSecret="+clientSecret+"&refreshToken="+refreshToken+"&deptName="+deptName+"\""; 
     writer.println(cronTabString); 
     writer.close(); 

的代碼寫成功與cron tab文件。但它不運行。我的問題是,以這種方式執行cron作業甚至是可能的嗎?據我所知,這是一個有效的cron選項卡條目,所以它應該被執行。我在這裏錯過了什麼嗎?

+0

我不知道這是否是一種好的做法。但是由於'sudo',你的'cron'條目可能沒有運行。 'sudo'需要用戶的密碼作爲輸入。 – linuxartisan

+0

我明白這不是一個好習慣,但正如@anacron所述,我們可能需要啓動或重新加載cron守護進程。這是可編程的嗎?如果cron標籤條目由於sudo而沒有運行,那麼我怎樣才能寫入文件? –

+0

更新 - 刪除sudo並沒有幫助! –

回答

1

嘗試以下操作:

crontab -r 
crontab /var/spool/cron/crontabs/multi 

(編輯)我相信,在Java中,你可以調用這些是這樣的:

Runtime.getRuntime().exec("crontab -r"); 
Runtime.getRuntime().exec("crontab /var/spool/cron/crontabs/multi"); 

首先一個刪除現有的crontab。第二個安裝新的crontab。然後你可以通過這樣做來驗證:

crontab -l 
+0

非常感謝!!!!這樣做的訣竅。想知道這是否也允許我一次執行多個cron作業,方法是將它追加到crontab文件中。 –

+0

是的,您應該可以將作業附加到文件並以此方式重新加載。調用'crontab -r'並不是真的必要,但調用它不會觸及你的文件。 – flu

+0

嗯......也會試一試! @flu再次感謝! –

3

crontab調度程序不僅僅是一個文件。它是一個以守護進程運行的進程。傳統上編輯crontab文件時,它會保存crontab條目並重新加載crontab進程。由於這個原因,簡單地寫入文件將無濟於事。您將需要重新加載或重新啓動cron守護進程。

更新

如果您使用以下命令在服務器上的root訪問權限,您可以重新啓動cron守護程序:

/etc/init.d/cron reload

所以,在你的Java程序在服務器上運行,您將需要執行此操作:

Runtime.getRuntime().exec("/etc/init.d/cron reload");

這將運行系統命令重新啓動cron守護進程並重新加載cron條目。

希望這會有所幫助!

更新2

的Linux的不同口味有不同的命令,重新啓動服務或守護程序。

您可以將此作爲一個很好的起點來檢查哪個命令將作爲上述exec方法中的參數。

Cron Command Syntaxes on different Linux Versions

+0

你有什麼建議,我們如何重新加載或以編程方式重新啓動cron守護進程?更具體地說,使用java? –

+0

您的Java程序是否在同一臺服務器上本地運行? – anacron

+0

謝謝!這看起來有希望。一旦我在我的系統,並讓你知道結果,將試試它。 –