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?
Antwort
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).
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? –
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();
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.
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);
Ist das nicht eine Aufgabe für [cron] (https://www.raspberrypi.org/documentation/linux/usage/cron.md)? (kein Wortspiel beabsichtigt) –
Wie führe ich ein einzelnes Java-Programm mit Cron aus? Oder muss ich eine JAR-Datei dieses Java-Programms erstellen? –
Bitte geben Sie weitere Informationen über das Betriebssystem, das Sie verwenden, etc. – Xyaren