Hallo,
hier die Lösung meines Problems:
$command = 'cd ' . $programmpfad . ' && ' . 'nohup ./' . $programmname . ' > ' . $logFile . ' 2> ' . $errorFile . ' & echo $!';
$command = 'nohup ' . $programmname . ' > ' . $logFile . ' 2> ' . $errorFile . ' & echo $!';
Wenn man das cd weg nimmt, wird das Skript im Hintergrund gestartet. So wie es sein soll. Das PHP-Skript arbeitet weiter. Mit Hilfe von Sessions und sonstigem Schnickschnack kann ich jetzt den Status abfragen. Etwas mehr im Detail:
exec($command, $return); $pid = $return[0];
Mit der PID kann man jetzt mit ps -p $pid abfragen ob das Programm noch läuft und natürlich auch killen. Alles schön in eine Klasse verpackt ... voila.
Auf der Shell sieht es ungefähr so aus:
cd /mein/pfad/zum/programm && nohup ./programmname > run.log 2> error.lug & echo $!
nohup ./programmname > run.log 2> error.lug & echo $!
Das heißt also, ich schreibe mir jetzt ein Skript mit cd und Co, was dann im Hintergrund gestartet wird. Wenn dann auch noch time funktioniert ... bin ich glücklich :D.
Kann mir zum Schluss jemand von den Shell-Profis erklären, warum der cd-Befehl das nohub verhindert? Vielen Danke.
Falk