![]() Mailinglisten-Archive |
Hi Norbert, Ich hab mal sowas in perl realisiert. Dazu wird das Script �ber eine shell gestartet und mit & von der Konsole abgeh�ngt. Das Script sieht folgendermassen aus: #!/bin/sh # chkconfig: 235 99 00 # description: Start or stop database triggers case "$1" in 'start') perl /ein/pfad/triggers.pl /ein/pfad/triggers.conf start & ;; 'stop') perl /ein/pfad/triggers.pl /ein/pfad/triggers.conf stop & ;; 'status') perl /ein/pfad/triggers.pl /ein/pfad/triggers.conf status ;; *) echo "Usage: $0 { start | stop | status}" ;; esac exit 0 Das Perlscript selbst pr�ft 1. Wurde das Script schon einmal gestartet? 2. Wenn ja und start --> abbrechen, soll ja nicht zweimal laufen sonst Status ausgeben oder Haltesignal * absetzten. 3. Wenn nein und Start ausf�hren. Wenn ich jetzt ein sh triggers start absetze wird mein Script gestartet. Bei sh triggers stop verzweigt das erste Script in eine Routine, die alle Buffers zur�ckschreibt und das Script ordenlich beendet. Das folgende Zeugs ist zwar nicht php sondern perl, macht aber in etwa das Konzept sichtbar: ############################################################### # # Pr�fen ob der Prozess schon gestartet wurde # ############################################################### sub prozess_gestartet { $status = "angehalten"; $Pid_File = Proc::PID_File->new(path=>$pidfile); if (!$Pid_File->init) { die "Kann pid file: $! nicht erstellen" } if ($Pid_File->active) { $Pid_File = Proc::PID_File->new(path=>$pidfilestop); if (!$Pid_File->init) { die "Kann pid file: $! nicht erstellen" } if ($Pid_File->active) { if (_(at)_ARGV[1] eq "status" || _(at)_ARGV[1] eq "status") { $status = "wird angehalten"; } else { $meldung = "Der Prozess $Scriptname wird bereits angehalten\n"; $beenden = "true"; } } if ((_(at)_ARGV[0] eq "stop" || _(at)_ARGV[1] eq "stop") && $beenden eq "false") { system("clear"); # Bildschirm l�schen print "Der Prozess \"$Scriptname\" wird angehalten!\n"; open(Datei,"<$pidfile") || die "Datei \"/var/run/triggers.pid\" nicht gefunden\n"; while(<Datei>) { chomp $_; push(_(at)_zeilen,$_); } close(Datei); while (1 eq 1) {} } if ((_(at)_ARGV[1] eq "status" || _(at)_ARGV[1] eq "status") && $beenden eq "false") { if ($status ne "wird angehalten") {$status = "l�uft";} } else { if ($beenden eq "false") { $meldung = "Der Prozess $Scriptname wird bereits ausgef�hrt!\n"; $beenden = "true"; } } } } ############################################################## # # Abbruchbedingung pr�fen Aufruf:$ perl triggers.pl stop # ############################################################## sub abbruch{ open(Datei,"<$pidfilestop"); while(<Datei>) { chomp $_; push(_(at)_zeilen,$_); } close(Datei); my $killPID = $zeilen[1]; if ($killPID ne "") { # Hier musst du dein Buffers retten usw.... # # # # system('kill -9 '.$killPID); unlink $pidfilestop; $dbh->disconnect(); system("clear"); $subject = "Prozess \"$Scriptname\" heruntergefahren"; $data = "Der Prozesss \"$Scriptname\" wurde am "; $data .= maildatum(); $data .= " beendet!\n\nDie L�schweitergabe bzw. - pr�fung wird nicht mehr ausgef�hrt!\n\n"; print $data; sendmail(); $beenden = "true"; } } ############################################################## # # BEGINN DER SCHLEIFE # ############################################################## sub Schleife { while ($beenden eq "false") { # Hier kommt dein Code rein! } if ($beenden eq "false") { abbruch(); } if ($beenden eq "false") { sleep $wait; } if ($beenden eq "false") { abbruch(); } } } ################################################################# # # Initialisierung # # ################################################################# $beenden = "false"; if($config{'printing'} eq "true") { system("clear"); # Bildschirm l�schen } lese_Konfiguration(); pruefe_Uebergabe(); if ($beenden eq "false") { prozess_gestartet(); if ($beenden eq "false") { pruefe_stop(); if ($beenden eq "false") { #POSIX::setsid() or die "Konnte keine neue Session starten: $!"; Datenbankverbindung(); konfigurationsausgabe(); if ($beenden eq "false") { if ($config{'printing'} eq "true") { print "Initialisierung\n"; } Initialisierungen(); Schleife(); } } } } * Das Haltesignal habe ich in meinem Falle in ne Datei geschrieben mit der pidnummer des zu stoppenden Prozesses. Gibt aber mit Sicherheit auch andere M�glichkeiten. MFG Wolfgang
php::bar PHP Wiki - Listenarchive