2012-12-24 60 views
0

我對服務器有一個約束,因此Cron/Autosys不可用於計劃shell腳本。有沒有一種方法可以從java程序安排shell腳本?石英調度程序是否有用? 有人可以爲我提供相同的示例代碼。如何從java程序計劃shell腳本

回答

0

您可以使用定時器:

int loopTime = 1000*60*60*12; 
Timer timer = new Timer(); 
timer.schedule(new TimerTask() 
{ 
     public void run() 
     { 
      Runtime.getRuntime().exec("your java command: java -classpath..."); 
    } 
},0, loopTime); //0 is for delay time in ms, loopTime is also in ms 
0

是的,你可以使用Quartz安排從Java你的任務。然後,您的Job實現將調用Runtime.exec(...)來啓動shell任務,並可能調用一些Process方法與任務交互。一些提示:

  • 當你要推出一個shell腳本,而不是直接調用你的shell腳本Runtime.exec(...)應該調用你的外殼可執行並通過您的shell腳本作爲參數。也就是說,您應該執行sh /path/to/your/shell/script.sh,而不是執行/path/to/your/shell/script.sh

  • 石英調度程序支持cron表達式,請參見石英中的CronTriggertutorial on supported cron expressions

  • 很顯然,Quartz調度程序作業只有在Quartz Scheduler服務運行的JVM運行時纔會運行。通常你在實施工作時需要考慮到這一點。另外,如果您沒有實現某種作業持久性,例如JobStoreCMT,則可能會跳過作業執行,並且動態調度的作業執行將無法在重新啓動後存活。

1

您可以使用ProcessBuilder類從java執行任何外部進程,包括批處理文件。這裏有Executing another application from Java有一個例子。

而不是定時器類,創建一個線程檢查時間間隔小可能會解決時間依賴性。

public class Test implements Runnable { 
    void run() {  
     while(true) {  
      if(myTime != currentTime) { 
       // check for the time until your time has come 
       // if not, sleep and continue 
       sleep(1000); 
       continue; 
      } 

      // Do your job and exit when necessary 
     } 
    } 
} 

你可以用線程執行這個類。

相關問題