2016-08-02 62 views
0

我已經在Raspberry Pi上編寫了一個簡單的java代碼,它將從Raspberry Pi發送的數據發送到服務器。現在,我不希望手動運行程序,而是希望該程序在後臺每10秒鐘(任何特定時間)自動執行一次,因此新的數據會在這段時間後發送到服務器。 Raspberry Pi正在Raspbian OS上運行。 有人可以幫我解決這個問題嗎?預先感謝您。如何在每個特定的時間間隔內在後臺運行Java程序?

+1

難道這不是一個任務[cron的(https://www.raspberrypi.org/documentation/linux/usage/cron.md)? (沒有雙關意圖) –

+0

如何使用cron運行單個java程序?或者我必須使該Java程序的jar文件執行? –

+0

請提供更多關於您正在使用的操作系統的信息。 – Xyaren

回答

1

您有兩種選擇:定期從cron或類似的地方運行您的作業,或將您的應用程序更改爲長時間運行的進程,該進程將作爲設備上的服務運行,並執行自己的計劃。像Quartz這樣的庫(http://www.quartz-scheduler.org/)可以用來做後者。長時間運行的作業的輕微優勢在啓動作業(JVM的初始化和拆卸)時可能會受到較小的懲罰。

+0

我對cron瞭解不多。我如何使用cron運行java文件?我有單個java proram,所以我應該在那裏添加它? –

0

您可以使用Thread在特定時間點執行您的代碼。

例子:

Thread thread = new Thread(new Runnable(){ 

     @Override 
     public void run() { 
      while(true){ 
       try{ 
        //your code 
        Thread.sleep(10*1000);//this is poll interval 
       }catch(InterruptedException e){ 
        e.printStackTrace(); 
       } 
      } 

     } 

}); 
thread.setDaemon(true); 
thread.start(); 
1

您可以使用您的應用程序,而不是一個Threadjava.util.Timer

Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 
    @Override 
    public void run() { 
     //write your code here 
     System.out.print(new Date() + "\n"); 
    } 
}, 0, 1000); 

我認爲這是解決您的問題最簡單的方法。

0

我找到了答案。 使用crontab可以在特定的時間間隔執行任務。 對於Java文件,你必須做出一個jar文件,然後如果你想每隔一分鐘後運行則crontab的語法是

          • 爪哇 - jar /path_of_your_jar_file/File_name.jar

但這裏的問題是,你的任務是重複每1分鐘。所以如果你想在10秒內完成,那麼你必須使用線程睡眠。 代碼線程睡眠是

Timer timer = new Timer(); 

timer.schedule(new TimerTask() { 

@Override 
public void run() { 

    method_name(); 

    } 
},0,10000); 
相關問題