簡體   English   中英

如何從Java程序安排Shell腳本

[英]How to schedule shell script from java program

我在服務器上有一個約束,因此Cron / Autosys無法用於計划Shell腳本。 有沒有辦法可以從Java程序安排shell腳本? 石英調度程序有用嗎? 有人可以提供相同的示例代碼嗎?

以下教程可幫助您安排外殼程序腳本。

http://www.mkyong.com/java/how-to-run-a-task-periodically-in-java/

通過使用

Runtime.getRuntime().exec("sh shellscript.sh");

您可以運行shell腳本。

您可以使用ProcessBuilder類從Java外部執行任何進程,包括批處理文件。 這里有一個從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 
        }
    }
}

您可以使用線程執行該類。

您可以使用計時器:

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

是的,您可以使用Quartz從Java計划任務。 然后,您的Job實現將調用Runtime.exec(...)啟動Shell任務,並可能調用某些Process方法與該任務進行交互。 一些技巧:

  • 在啟動外殼腳本時,不要直接使用Runtime.exec(...)調用外殼腳本,而應調用外殼可執行文件並將外殼腳本作為參數傳遞。 也就是說,不是exec'ing /path/to/your/shell/script.sh ,你應該Exec的sh /path/to/your/shell/script.sh

  • Quartz Scheduler支持cron表達式,請參閱CronTrigger有關 Quartz中支持的cron表達式的教程

  • 顯然,只有在運行了Quartz Scheduler服務的JVM時,Quartz Scheduler作業才會運行。 通常,在實施工作時需要考慮到這一點。

  • 另外,如果您未實現某些作業持久性,例如JobStoreCMT ,則可能會跳過作業執行,並且動態計划的作業執行將無法在重新啟動后幸免。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM