Bat-Datei ausführen über IPS_Execute funktioniert nicht

Hallo zusammen,

da ich leider im Forum noch keine passende Lösung für mein Problem gefunden habe, möchte ich hierzu gerne ein neues Thema eröffnen.
Mein Ausgangs-System: Windows Server 2016 mit IP-Symcon 6.4
Ich möchte gerne eine Batch-File über IPS_Execute ausführen, welche von meinen MySQL Datenbanken
einen Dump zieht und in der Datensicherung ablegt.

<?
//Parameter - Allgemein
$Laufwerk 		= GetValueString(25743);  //Hier ist der Pfad zur Datensicherung hinterlegt
$OrdnerAktuell 	= 52622;  //Enthält den aktuellen Ordner im Format YYYY_MM_DD
date_default_timezone_set("Europe/Berlin");
$Datum          = date("Y_m_d",time()); 

//Ordner erstellen
$Ordner = date("Y_m_d",time()); 
if (GetValueString($OrdnerAktuell) == $Ordner):

else:
	create_dir($Laufwerk.'\\'.$Ordner);
	SetValueString($OrdnerAktuell, $Ordner);
endif;

//Batch-File erstellen
$WikiMySQLDump      = 'mysqldump -uUSER -pPASS wikidb > '.$Laufwerk.'/'.$Ordner.'/'.$Datum.'_wikidb.sql';
$StammbaumMySQLDump = 'mysqldump -uUSER -pPASS stammbaum > '.$Laufwerk.'\\'.$Ordner.'\\'.$Datum.'_stammbaum.sql';

$datei = fopen("D:\IP-Symcon\batch\Backup.bat","w");
fwrite($datei, $WikiMySQLDump."\r\n".$StammbaumMySQLDump);
fclose($datei);

//Batch-File ausführen
IPS_Execute('D:\IP-Symcon\batch\Backup.bat', '', false, false);


//Funktion: Ordner erstellen
function create_dir($path,$chmod=0777) { 
  if(!(is_dir($path) OR is_file($path) OR is_link($path) )) 
    return mkdir ($path,$chmod); 
  else 
    return false; 
}
?>

Führe ich das Skript über die Verwaltungskonsole manuell aus, wird die Backup.bat erstellt und läuft offensichtlich auch los. Leider bleiben meine *.sql Dateien leer.

Ändere ich das
IPS_Execute(‚D:\IP-Symcon\batch\Backup.bat‘, ‚‘, false, false);
in
IPS_ExecuteEx(‚D:\IP-Symcon\batch\Backup.bat‘, ‚‘, false, false, -1);

bekomme ich die Fehlermeldung „Warning: Cannot find user session in D:\IP-Symcon\scripts\37096.ips.php on line 34“.

Ich habe schon / statt \ , die cmd.exe mit und ohne zusätzliche Pfadangabe und mysqldump-Befehl direkt als Argument versucht - leider alles ohne Erfolg.

Habt ihr eine Idee? Danke vielmals :slight_smile:
Gruß, Sven

Eine User Session existiert nur, wenn du auf der Maschine als User angemeldet bist (also in der GUI).

Ansonsten tippe ich mal auf ein Problem mit der Berechtigung; in jedem Fall lohnt es sich, die Fehlerausgaben deiner Batchdatei mal in eine Datei umzuleiten mit meinbefehl > output.txt 2>&1 (der hintere Teil sorgt dafür dass auch stderr mit umgeleitet wird)

1 „Gefällt mir“

Hallo sokkederheld,

Danke :slight_smile: Der Tipp mit der Fehlerausgabe hat mich auf den entscheidenden Weg gebracht.
Der Befehl mysqldump wird bei Ausführung durch IPS_Execute nicht gefunden, obwohl dieser in Windows bekannt ist - hatte die Batch-Ausführung vorher durch eine Windows Zeitplanung laufen und dort lief es ohne Probleme.

Habe nun entsprechend den Befehl im Batch-File umgestellt:

$WikiMySQLDump      = '"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe" -uUSER -pPASS wikidb > '.$Laufwerk.'\\'.$Ordner.'\\'.$Datum.'_wikidb.sql';
$StammbaumMySQLDump = '"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe" -uUSER -pPASS stammbaum > '.$Laufwerk.'\\'.$Ordner.'\\'.$Datum.'_stammbaum.sql';

und siehe da: Läuft :)

Gruß, Sven

Damit ein Befehl in Windows von überall her gefunden werden kann, müsste er in der %path%-Umgebungsvariable eingetragen sein.

Ansonsten ist ohne Angabe eines vollständigen Pfads das aktuelle Arbeitsverzeichnis (anzeigbar mit cd) entscheidend.

1 „Gefällt mir“