Hi Community,
ich melde mich mal mit meinem ersten Post:
Ich habe mir mal Gedanken zum Thema JTL-
Worker gemacht. Leider ist das nicht noch nicht Server-Always-On Ready. Leider ist auch das ansprechen und Informationen zu bekommen seeehr spärlich bis gar nicht vorhanden.
Also habe ich mich mal daran gemacht ein Powershellskript darum zu bauen.
Code:
#******************#
# Dominik Bucher #
# JTL Worker #
# 28.07.2020 #
#******************#
$StartWorkerFile = "..\JTL_Worker.bat" #Add the right file path
$EmailFrom = "" #Add the right sender email address
$EmailTo = "" #Add the right reciever email address
$Body = "JTL Worker is not Running. Please Check it"
$EmailSubject = "Error with JTL Worker"
$EmailUser = "" #Add the right User
$EmailPW = "" #Add the right Password
$EmailPW = $EmailPW | ConvertTo-SecureString -AsPlainText -Force
$EmailCred = New-Object System.Management.Automation.PSCredential($EmailUser, $EmailPW)
$PSEmailServer = "" #Add the right SMTP relay server
$TryToStartProcess = 0
try
{
do
{
$TimerToRestartProcess++
$JTLProcess = Get-Process | where{$_.Name -eq "JTL-Wawi"}
if(!($JTLProcess -eq "" -or $JTLProcess -eq $null) -and $TimerToRestartProcess -eq "60")
{
Stop-Process -Name $JTLProcess.Name
}
if($JTLProcess -eq "" -or $JTLProcess -eq $null -or $TimerToRestartProcess -eq "60")
{
$TimerToRestartProcess = 0;
Start-Process $StartWorkerFile
$TryToStartProcess++
}
else
{
$TryToStartProcess = 0;
}
if($TryToStartProcess -gt 3)
{
exit
}
sleep 120
}while($true)
}
catch
{
Write-Host "error"
}
finally
{
if($TryToStartProcess -gt 3)
{
Send-MailMessage -to $EmailTo -from $EmailFrom -Subject "Try to start Worker" -body "Tried to start the Worker a Third time in a row without success - Please Check it" -Credential $EmailCred -SmtpServer $PSEmailServer -Port 587 -UseSsl
}else
{
Send-MailMessage -to $EmailTo -from $EmailFrom -Subject $EmailSubject -body $body -Credential $EmailCred -SmtpServer $PSEmailServer -Port 587 -UseSsl
}
}
Die Datei
Code:
$StartWorkerFile = "..\JTL_Worker.bat"
schaut aus wie in den ersten Kommentare:
Bash:
@echo off
Start "" "C:\Program Files (x86)\JTL-Software\JTL-wawi.exe" WORKER <Profile> <Username> <Password>
Gefüllt mit Standardparamter schaut das dann so aus:
Bash:
@echo off
Start "" "C:\Program Files (x86)\JTL-Software\JTL-wawi.exe" WORKER Standard Worker_User <Password>
Kurze Beschreibung zum .ps1 Skript:
Am Anfang werden grundsetzliche Variabeln definiert.
Danach baut ein Try-Catch-Finally eine Absicherung, um bei einem Skriptfehler oder Prozessfehler ein versenden der E-Mail zu garantieren.
Die Do-While Schleife stellt sicher, dass der Process immer ausgeführt wird. Darin wird ein Counter ( $TimerToRestartProcess++) hochgezählt um einen Neustart des Workers alle 2h durchzuführen. Hierbei versuchen wir einen Fehler zu eliminieren, welcher das Programm zum beenden zwingt aber den Windows Prozess nicht auflöst.
Mit der Variable $TryToStartProcess wird geprüft, sollte der JTL Worker nicht starten (aus Unbekannten Gründen), so wird der Neustart/Start des Workers nach 3 Versuchen abgebrochen und eine E-Mail für den manuellen Eingriff versendet.
Damit das System nicht dauerhaft prüft, wurde ein
eingebaut. Dieser Wert ist bei 120 Sekunden und kann angepasst werden. Wichtig dabei ist die Anpassung der
Variable, da diese Inverbindung der Laufzeit steht.
Ich hoffe, ich habe hier ein paar Personen geholfen und bei Verbesserungsvorshläge nicht sparen
Grüße