[英]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.