2016-08-02 29 views
0

Ich hatte einen einfachen Java-Code auf Raspberry Pi geschrieben, der Daten von Raspberry Pi zum Server sendet. Jetzt, anstatt ein Programm manuell zu starten, möchte ich, dass das Programm alle 10 (jede spezifische Zeit) Sekunde automatisch im Hintergrund ausgeführt wird, so dass nach diesem Zeitraum neue Daten an den Server gesendet werden. Raspberry Pi läuft auf Raspbian OS. Kann mir jemand helfen, wie das geht? Vielen Dank im Voraus.Wie führe ich Java-Programm im Hintergrund in jedem bestimmten Zeitintervall?

+1

Ist das nicht eine Aufgabe für [cron] (https://www.raspberrypi.org/documentation/linux/usage/cron.md)? (kein Wortspiel beabsichtigt) –

+0

Wie führe ich ein einzelnes Java-Programm mit Cron aus? Oder muss ich eine JAR-Datei dieses Java-Programms erstellen? –

+0

Bitte geben Sie weitere Informationen über das Betriebssystem, das Sie verwenden, etc. – Xyaren

Antwort

1

Sie haben zwei Möglichkeiten: Führen Sie Ihren Job in regelmäßigen Abständen von cron oder etwas Ähnlichem oder ändern Sie Ihre Anwendung als lang laufenden Prozess, der als Dienst auf Ihrem Gerät ausgeführt wird und seine eigene Planung durchführt. Bibliotheken wie Quartz (http://www.quartz-scheduler.org/) können verwendet werden, um Letzteres zu tun. Ein kleiner Vorteil eines Jobs mit langer Laufzeit kann eine kleinere Strafe sein, wenn der Job gestartet wird (Initialisierung und Abbau von JVM).

+0

Ich weiß nicht viel über Cron. Wie kann ich Cron zum Ausführen einer Java-Datei verwenden? Ich habe Single Java ProRam, also wo soll ich das hinzufügen? –

0

Sie können eine Thread verwenden, um Ihren Code zu bestimmten Zeitpunkten auszuführen.

Beispiel:

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

Sie können eine java.util.Timer für Ihre Anwendung verwenden, anstatt Thread.

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

Ich denke, es ist der einfachste Weg, um Ihr Problem zu lösen.

0

Ich fand die Antwort dafür. Mit Crontab können Sie die Aufgabe in bestimmten Zeitintervallen ausführen. Für Java-Datei müssen Sie eine JAR-Datei machen und dann, wenn Sie nach jeder Minute laufen wollen, dann die Syntax für crontab ist

          • java - jar /path_of_your_jar_file/File_name.jar

Aber hier ist das Problem ist Ihre Aufgabe, alle 1 Minute wiederholt. Wenn du es in 10 Sekunden machen willst, musst du dafür den Thread-Schlaf verwenden. -Code für Thema Schlaf ist

Timer timer = new Timer(); 

timer.schedule(new TimerTask() { 

@Override 
public void run() { 

    method_name(); 

    } 
},0,10000);