Thread Wenn Perl-Skript beendet wird, Subroutine noch ausführen
(17 answers)
Opened by Gustl at 2012-11-20 12:02
Danke für die Infos, aber weder über das API-Modul noch über END funktioniert das unter Windows.
Mal Grundlegendes zu meinem Vorhaben: Ich möchte ein skript erstellen, welches Cronjobs verwaltet. Das Skript wird per wperl im Autostart aufgerufen. Beim Herunterfahren soll die Abmeldezeit in einer Datei geschrieben werden, damit ich dann beim nächsten starten des Skripts überprüfen kann ob jobs ausstehen und wenn ja, diese dann starten kann. Jetzt habe ich mir überlegt, einfach bei jedem starten von einem Job und jede Minute einfach die aktuelle Zeit in einer Datei zu schreiben. Folgendes Skript: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 #!/usr/bin/perl use warnings; use strict; use Schedule::Cron; my @cronjobs; push(@cronjobs, { timespec => "* 8 * * Mon-Fri 0-40/10", name => "job1", subroutine => \&go_job1 } ); #push(@cronjobs, { timespec => "* 7 * * Mon-Fri 0-40/10", name => "job2", subroutine => \&go_job2 } ); #push(@cronjobs, { timespec => "35 7 * * Mon-Fri", name => "job3", subroutine => \&go_job3 } ); # jede Minute wird die die aktuelle zeit in last_online.txt geschrieben my $cron = new Schedule::Cron(\&last_on); $cron->add_entry("* * * * *"); foreach(@cronjobs){ #$cron->add_entry( $_->{timespec}, \&go_job3 ); $cron->add_entry( $_->{timespec}, \&{$_->{subroutine}}($_->{name}) ); } $cron->run(nofork => 0); sub go_job1{ print shift."\n"; system("notepad.exe"); last_on(); } sub go_job2{ print shift."\n"; system("calc.exe"); last_on(); } sub go_job3{ print shift."\n"; system("calc.exe"); last_on(); } sub get_time_now{ my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(); if($Stunden < 10){ $Stunden = "0".$Stunden; } if($Minuten < 10){ $Minuten = "0".$Minuten; } if($Sekunden < 10){ $Sekunden = "0".$Sekunden; } $Jahr += 1900; if($Monat == 12){ $Monat = 1; } else{ $Monat++; } if($Monatstag < 10){ $Monatstag = "0".$Monatstag; } if($Monat < 10){ $Monat = "0".$Monat; } return $Monatstag.".".$Monat.".".$Jahr." ".$Stunden.":".$Minuten.":".$Sekunden; } sub last_on{ open FH, ">C:\\perl_schedule\\last_online.txt" or die ("Fehler beim schreiben $!"); print FH get_time_now(); close FH; } Probleme habe ich bei der Übergabe über einem hashref von der subroutine. Zeile 17 würde funktionieren, aber ungeeignet, da ich die ausstehende Jobs,nach wiederstarten des skripts, überprüfen muss und dann die jeweilige subroutine für den job starten muss. Mit Zeile 18 wird die subroutine sofort ausgeführt... Weiß wer wo mein Fehler ist? |