Patrick Andrieu: Programm als Dienst vs. im Autostart (Windows)

Hallo alle!

Ich habe mir eben ein kleines Perl-Programm geschrieben, der eine Log-Rotation für meinen noch frisch installierten Apache (Xampp, wer outet sich, und gibt zu, doch noch die langen Threads gelesen zu haben? *g*) »organisiert«.

Das Progrämmche habe ich im Taskplaner eingenistet, es startet um Punkt 00.00 Uhr, stoppt den Apache, wenn dieser läuft, verschiebt die Logs in /xampp/apache/logs/old, weckt den Häuptling wieder und hat dann alle Ruhe, die eben verschobenen Logfiles (error.log, access.log) umzubenennen... yeah, alles zufriedenstellend...

Da ich mir das hier [1] Dargestellte überlegt habe, habe ich den Xampp-Apache nicht als Dienst laufen lassen wollen, sondern wollte mein Programm in den Autostart-Ordner von Windows legen. Aber eben das quittiert mir Apache mit einem Programmabruch (»Apache hat ein Problem festgestellt und muss beendet werden). Wenn ich das Teil aus dem Autostart herausnehme, und irgendwann, lange nach dem ich sicher bin, dass Windoof und seinen was-weiß-ich-wie-vielen-Hilfsproggis geladen wurde, den Apache dennoch über mein Programm starte, ja, dann läuft es.

Was passiert also beim Booten genau, wann werden Dienste geladen, wann wird der Autostart durchgegangen, kann das sein, dass da noch nicht alles zur Verfügung steht...?

[1] Gegen den Apache als Dienst sprach das Folgende: Das Programm vergleicht das aktuelle Datum (sagen wir mal »heute«, was eben time() ausgibt), mit dem mtime-Zeitstempel der Logfiles. Wenn Apache als Dienst läuft, dann wird er ja quasi sofort mit Windows gestartet. Und nun folgendes Gedankenspiel:

  • PC wird um 23.30 Uhr am 22. Januar heruntergefahren, Apache liegt zwangsläufig auf den ewigen Jagdgründen, die Logs haben alle ein mtime vom 22.01.
  • PC wird um 08.00 Uhr am 23. Januar wieder eingeschaltet, Apache startet gleich als Dienst, modifiziert sofort zumindest die error.log auf mtime 23.01. 08:01 oder so...
  • ich starte mein Programm, es sieht: time und mtime sind gleich (zumindest vom Tag her), und sagt sich: Prima, nix zu tun

Gegen einen anderen Vergleich (auf ctime.Zeitstempel) spricht, dass der »Created time« der access.log zum Beispiel unverändert bleibt. OK, man könnte die Datei gleich nach dem Verschieben unlinken, so dass wirklich eine Nagelneue vom Apache erstellt wird... aber dennoch wurmt mich die Sache mit dem Autostart...

Viele Grüße aus Frankfurt/Main,
Patrick

--

_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?
  1. Hi Patrick,

    Da ich mir das hier [1] Dargestellte überlegt habe, habe ich den Xampp-Apache nicht als Dienst laufen lassen wollen, sondern wollte mein Programm in den Autostart-Ordner von Windows legen. Aber eben das quittiert mir Apache mit einem Programmabruch (»Apache hat ein Problem festgestellt und muss beendet werden).

    Bei mir Poppt um exakt 00.00 Uhr ein Fensterchen auf, das mir mitteilt, was xampp grade tut. :)
    Nämlich Dateien verschieben, dein Script lebt. *g (ist im Autostart Verzeichnis von AllUser)

    Also bei mir läuft es, häng aber irgendwie an meinem Kram fest und komm nicht zum Testen.

    Grüße aus H im R,
    Engin

    1. Hallo Engin!

      Danke für die Rückmeldung!

      Bei mir Poppt um exakt 00.00 Uhr ein Fensterchen auf, das mir mitteilt, was xampp grade tut. :)
      Nämlich Dateien verschieben, dein Script lebt. *g

      Ja, der Start als geplanter Task funktioniert bei mir auch. Nur wenn eine Verknüpfung

      im Autostart Verzeichnis von AllUser

      ist, kommt es zum Programmabbruch. Nehme ich die Verknüpfung heraus, starte den lahmen Laptop, vergesse ihn zehn Minuten, und starte dann das Progrämmche, dann flutscht es wieder wie geschmiert. Der Schleppi ist aber sehr alt und riecht zudem oft nach Fish&Fries... ;)

      Also bei mir läuft es, häng aber irgendwie an meinem Kram fest und komm nicht zum Testen.

      Nenn Dich einfach: Komzunix!

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
      1. Hi Patrick,

        Danke für die Rückmeldung!

        Gerne doch!

        im Autostart Verzeichnis von AllUser

        ist, kommt es zum Programmabbruch. Nehme ich die Verknüpfung heraus, starte den lahmen Laptop, vergesse ihn zehn Minuten, und starte dann das Progrämmche, dann flutscht es wieder wie geschmiert. Der Schleppi ist aber sehr alt und riecht zudem oft nach Fish&Fries... ;)

        Ja, den kenn ich doch auch noch. Wobei mein Dell auch nicht besser ist, 512MB Arbeitsspeicher,
        wenn ich hier voll zu gange bin geht garnichts mehr, zum Glück stürzt der mir nicht ab, dafür bleibt der umso öfter
        hängen. Über mein Haus Rechner will ich erst garnicht anfangen. *g

        Nenn Dich einfach: Komzunix!

        Klingt gut, mal schauen. :)

        Grüße aus H im R,
        Engin

  2. Hallo Patrick,

    Da ich mir das hier [1] Dargestellte überlegt habe, habe ich den Xampp-Apache nicht als Dienst laufen lassen wollen, sondern wollte mein Programm in den Autostart-Ordner von Windows legen.

    warum diese Klimmzüge. Lass den apache als Dienst laufen, stelle die Startart
    jedoch auf manuell. Das geht supereinfach im Diensteapplet. Wo ist das Problem?

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz!

      warum diese Klimmzüge. Lass den apache als Dienst laufen, stelle die Startart
      jedoch auf manuell. Das geht supereinfach im Diensteapplet. Wo ist das Problem?

      Muss ich ausprobieren, danke. Hautpsache, er rührt die Zeitstempel dann nicht an ;)

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
  3. Moin Moin!

    Ich habe mir eben ein kleines Perl-Programm geschrieben, der eine Log-Rotation für meinen noch frisch installierten Apache (Xampp, wer outet sich, und gibt zu, doch noch die langen Threads gelesen zu haben? *g*) »organisiert«.

    Das Progrämmche habe ich im Taskplaner eingenistet, es startet um Punkt 00.00 Uhr, stoppt den Apache, wenn dieser läuft, verschiebt die Logs in /xampp/apache/logs/old, weckt den Häuptling wieder und hat dann alle Ruhe, die eben verschobenen Logfiles (error.log, access.log) umzubenennen... yeah, alles zufriedenstellend...

    Warum so umständlich? Der Apache bringt seit mindestens 1.3 ein rotatelogs-Tool mit, das ohne Service-Ausfall funktioniert. Siehe http://httpd.apache.org/docs/2.2/logs.html#piped. Wenn Dir das Verhalten von Apaches rotatelogs nicht gefällt, kannst Du Dir auch ein eigenes schreiben, das eben nicht nach 24 Stunden, sondern immer um Mitternacht GMT oder Localtime die Log-Datei wechselt.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Hallo Alexander!

      Warum so umständlich? Der Apache bringt seit mindestens 1.3 ein rotatelogs-Tool mit, das ohne Service-Ausfall funktioniert. Siehe http://httpd.apache.org/docs/2.2/logs.html#piped. Wenn Dir das Verhalten von Apaches rotatelogs nicht gefällt

      Es ist nicht, dass es mir nicht gefällt, und auch nicht, dass ich das nicht kannte (ich habe natürlich zunächst nach mitgelieferten Möglichkeiten gesucht, und kenne diese Seite also)... Aber es funktionierte bei mir nicht:

      piped log program '/xampp/apache/bin/rotatelogs.exe logs/access.log 86400' failed unexpectedly

      Beim Start des Apache startet ein cmd-Fenster, das nicht schließt (finde ich nicht gerade schön), und so bald ich eine Datei aufrief, poppte ein solches Fenster, ging wieder auf, wieder zu, etc... eine Art Endlosschleife aus der ich nur 'rauskam, wenn ich Apache wieder stoppte...

      Aus dem Abschnitt darüber auf der verlinkten Webseite (Log Rotation) bin ich auch nicht schlau geworden.

      kannst Du Dir auch ein eigenes schreiben, das eben nicht nach 24 Stunden, sondern immer um Mitternacht GMT oder Localtime die Log-Datei wechselt.

      Sowas tut mein Programm ja auch, als geplanter Task um Punkt Mitternacht funktioniert es hervorragend.

      Aber nachdem ich heute den müden Schleppi wieder zwangsabschalten musste, und der Apache danach sich nicht starten ließ, habe ich eben etwas länger gesucht, die Ereignisanzeige studiert und etwas gegooglet. Schuld ist die Datei libapr-1.dll im Verzeichnis /xampp/apache/bin:

      Ereignisanzeige/Anwendung:

      Fehlgeschlagene Anwendung httpd.exe, Version 2.2.6.0, fehlgeschlagenes Modul libapr-1.dll, Version 1.2.11.0, Fehleradresse 0x00004250.
      Fehlgeschlagene Anwendung apache.exe, Version 2.2.6.0, fehlgeschlagenes Modul libapr-1.dll, Version 1.2.11.0, Fehleradresse 0x00004250.

      Ereignisanzeige/System:

      Generate Activation Context ist für E:\xampp\apache\bin\libapr-1.dll fehlgeschlagen. Referenzmeldung: Der Vorgang wurde erflogreich beendet.
      Resolve Partial Assembly ist für Microsoft.VC80.CRT fehlgeschlagen. Referenzfehlermeldung: Die referenzierte Assemblierung ist nicht auf dem Computer installiert.
      Abhängige Assemblierung "Microsoft.VC80.CRT" konnte nicht gefunden werden. "Last Error": Die referenzierte Assemblierung ist nicht auf dem Computer installiert.

      Zufriedenstellende Lösungen habe ich allerdings nicht gefunden. Nach ein paar Mal Um- und Wiederbenennen der libapr-1.dll wollte der Apache dann wieder doch aus den ewigen Jagdgründen auferstehen ;)

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?