SuExec + stoppen langlaufender CGI-Prozesse

Apache, Lighttpd, nginx, Cherokee
andy.steffens
Posts: 6
Joined: 2007-08-01 20:37

SuExec + stoppen langlaufender CGI-Prozesse

Post by andy.steffens » 2010-03-22 00:48

Guten Abend,

ich hab ein recht komisch anmutendes Problem.
OS: SLES 10 SP3
Konfig: Apache 2.0 mit mod_cgi, mod_perl

Wir habe das Problem, dass ein Apache ein laufendes CGI-Script abbricht, sobald der User im Browser auf Stop klickt. Auf einem früheren Server mit suexec liefen diese scripte aber problemlos weiter. Die Scripte sind im Sinne dieses Verhaltens entwickelt worden.

Ein Test mit folgendem Script:

Code: Select all

#!/usr/bin/perl
print "Content-Type: text/html\n\n";
$|=1;
open(TABLEFILE, ">./test.txt");
close(TABLEFILE);
print " test 22.03.2010";
for(my $x=1; $x <= 500; $x++){

   open(TABLEFILE, ">>./test.txt");
   print TABLEFILE time . ' ' . $x . "\n";
   close(TABLEFILE);

   print "$x<br />";
   sleep(1);
}


brachte folgendes Ergebnis. Ohne Suexec laufen die Prozesse als Apacheuser und werden beim Stop im Browser beendet (nach ca. 2 Sek). Läuft das Script unter suexec (mittels yast installiert) kann Apache das Script anscheinend nicht korrekt abbrechen und des läuft weiter bis zum Ende.

Ich frage mich nun, was ist das richtige Verhalten. Hat Apache keine Rechte den mittels suexec gestarteten Prozess zu killen? Oder andersherum, kann ich Apache so konfigurieren, dass es CGIs nicht abbricht, so dass ich das Verhalten wie unter suexec erhalte.

SuExec soll auf den aktuellen Systemen eigentlich nicht mehr eingesetzt werden.

Eine Recherche brachte nichts wirklich hilfreiches zu Tage.

Über eine Idee wäre ich sehr dankbar.

mfg
Andreas

User avatar
daemotron
Administrator
Administrator
Posts: 2800
Joined: 2004-01-21 17:44

Re: SuExec + stoppen langlaufender CGI-Prozesse

Post by daemotron » 2010-03-22 10:10

Wird das Perl-Skript denn jetzt als CGI ausgeführt oder per mod_perl? mod_perl != CGI!
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

dotme
Posts: 150
Joined: 2004-12-15 16:48

Re: SuExec + stoppen langlaufender CGI-Prozesse

Post by dotme » 2010-03-22 10:35

Vermutlich erhält Dein Skript nach dem Trennen des Browsers ein SIGPIPE bei der nächsten Ausgabe, worauf es sich standardmässig beendet.
Du könntest mal ein

Code: Select all

$SIG{PIPE} = 'IGNORE';

am Anfang hinzufügen und gucken, ob das Skript zu Ende läuft.

andy.steffens
Posts: 6
Joined: 2007-08-01 20:37

Re: SuExec + stoppen langlaufender CGI-Prozesse

Post by andy.steffens » 2010-03-22 12:24

Wird das Perl-Skript denn jetzt als CGI ausgeführt oder per mod_perl? mod_perl != CGI!


Das Script läuft läuft mittels mod_cgi.
mod_perl stünde aber auch zur Verfügung.

Code: Select all

$SIG{PIPE} = 'IGNORE';


Vielen Dank für den Tipp. Werde das mal testen.

mfg
a.steffens