Script zur Überprüfung ob Programm läuft und falls nicht starten

Egijuggernaut

Newbie
Registriert
Mai 2019
Beiträge
7
Hallo ich habe einen Backup Client der öfters mal abschmiert.

Hat jemand von euch eine Idee wie ein Script aussehen würde, dass ich gerne alle 6 Stunden Laufen lassen würde und Überprüft ob das Programm läuft und falls es nicht läuft das Programm startet.

LG
 
per Batch.
Entweder so in den Autostart legen:
Code:
@echo off
:ANFANG
ping 127.0.0.1 -n 21600
tasklist /FI "IMAGENAME eq notepad.exe" 2>NUL | find /I /N "notepad.exe" >NUL
REM AN
if "%ERRORLEVEL%"=="0" REM echo "AN"

REM AUS
if "%ERRORLEVEL%"=="1" START notepad
GOTO ANFANG

Prüft ob alle 6 Stunden (1 Ping = 1 Sekunde; 6 Stunden = (60 ping x 60 Minuten x 6 Stunden) ob die notepad.exe gestartet ist. Falls nicht => wird diese gestartet & das Skript springt wieder auf Anfang

Oder

Die Zeilen :Anfang, goto Anfang, ping 127.0.0.1 -n 21600 entfernen & die Batch als Windowstask regelmäßig geplant starten lassen.

//EDIT:
und das ganze mit autoit (beim Sleep-Befehl wird mit Millisekunden gerechnet):
Code:
while 1
sleep(21600000)

If ProcessExists("notepad.exe") Then
;AN

Else
;AUS
Run("notepad.exe")

EndIf

WEnd
Falls als Task geplant : While 1, Wend, sleep(21600000) entfernen
 
Zuletzt bearbeitet:
Ich würde das als Task planen und nicht als Dauerschleife laufen lassen. Wenn die Batch aus irgendeinem Grund mal aussteigt, bekommt man das nicht mit und dann ist Pustekuchen. Als Task ist das hinfällig, weil die Batch dann jeweils nur genau einmal getriggert wird und durchläuft.
 
Vielen vielen Dank du euch beiden. Okay dann werde ich das ganze doch planen. Wie müsste das Script denn dann aussehen? Einfach die -n rausnehmen? Und wisst ihr nen gutes Programm mit dem man sowas plant oder einfach mit cronjob?
Danke nochmal für die tollen schnellen Antworten.
 
cron ist Linux, Task Planer und Batch sind Windows. Normalerweise geht man davon aus, dass ohne nähere Angaben von Windows die Rede ist. Da du nun mit cron anfängst, muss man sich aber fragen ob du nicht doch Linux meinst. Wenn ja, müsste das obige Skript stattdessen mit bash, o.ä. geschrieben werden.
 
Hi, sorry kenne cron nur von Mac. Ne geht wirklich um Windows also alles richtig :).
 
Dann einfach in der Suchleiste "task planer" eingeben, anklicken, Task erstellen, Batchdatei auswählen, Intervall einstellen, speichern.
 
Alles klar danke.
Muss ich dann aus dem obigen Script noch was rausnehmen, da das jetzt ja gerade so geschrieben ist, dass es ständig läuft und pingt und nicht wie du meintest einmalig.
Lg
 
Ich das Skript von @ryan_blackdrago ein wenig angepasst:

Code:
@ECHO OFF

SET exepath=c:\programme\bla
SET executable=bla.exe
SET params=-a -bc -d 123
SET logfile=c:\log.txt

tasklist /FI "IMAGENAME eq %executable%" 2>NUL | find /I /N "%executable%" >NUL

IF "%ERRORLEVEL%"=="0" (
   ECHO "%date% %time% SCHON AN" >> %logfile%
)

IF "%ERRORLEVEL%"=="1" (
   ECHO "%date% %time% WIRD GESTARTET" >> %logfile%

   START %exepath%\%executable% %params%
)

Einfach die 4 Variablen am Anfang anpassen Wenn die Anwendung keine Parameter zum Start braucht, kannst du die Variable einfach mit params= leerlassen.
 
Super danke.
Was genau macht denn der set PARAMS befehl. Bzw. Welche Parameter werden dort gesetzt oder sollte ich dort eintragen?
 
Das kommt darauf an was du denn starten willst. Im Beispiel aus #2 wurde ja lediglich auf notepad.exe geprüft und im Falle eines Falles eben notepad gestartet. Da sowas mit notepad natürlich wenig sinnvoll ist, wirst du sicher etwas anderes starten wollen und das braucht gegebenenfalls Startparameter. Nehmen wir mal als Beispiel ein Backup. Das Backup stößt man ja nicht mit "backup.exe" an, sondern sinngemäß mit "backup.exe quelle ziel".

Aus

SET exepath=c:\programme\bla
SET executable=bla.exe
SET params=-a -bc -d 123
[..]
START %exepath%\%executable% %params%


wird zur Laufzeit dann

START c:\programme\bla\bla.exe -a -bc -d 123

Inwiefern das bei deiner Anwendung notwendig ist, musst du selbst wissen. Wenn es keine Parameter gibt, dann lässt man die Zeile mit params einfach so:

SET params=

Nu ist die Variable leer und wird vom START-Kommando einfach ignoriert.
 
Alles klar danke.
Es ist tatsächlich ein Backup.
Jedoch wird ein Backup Client ausgeführt, Synology active Business. Ich gehe davon aus dass dieser keine Parameter benötigt. Ich Probier es einfach mal aus.
Vielen vielen Dank euch beiden. Habt mir sehr weitergeholfen!!
 
  • Gefällt mir
Reaktionen: Raijin
Wenn es sich um Windows handelt, dann dürfte ein kleines Powershellskript wohl die beste Wahl sein.

Idealerweise ein DSC-Skript (das führt hier aber zuweit) oder eben folgende Zeilen:

PowerShell:
if ((Get-Service -Name <servicename>).Status -ne "Running")
{
    Restart-Service -Name <servicename>
}

Das ganze als .ps1-Datei speichern und im Aufgabenplaner oder wie das Ding heißt alle wasweißich ... 1h ausführen
 
Zurück
Oben