Ich habe Apache 2.4 mit PHP 5.4 unter Windows Server 2008 gemäß den Anweisungen in diesem Handbuch installiert: Apache-Installationshandbuch . Apache läuft jetzt als Dienst.
Meine Anwendung benötigt ein PHP-Websocket-Skript, das im Hintergrund ausgeführt wird. Ich führe es manuell mit:
%Vor%Die Frage ist: Gibt es eine Möglichkeit, ein Hintergrundskript automatisch beim Neustart des Systems (Apache) zu starten?
Ich habe das folgende Thema , aber ich wusste nicht, wo ich ein Apache-Startup-Skript für Windows finden konnte.
Jede Hilfe wird sehr geschätzt.
Ich habe eine Lösung :)
%APACHE_HOME%\bin\httpd.exe
bis %APACHE_HOME%\bin\httpdVendor.exe
%APACHE_HOME%\bin\httpd.exe
Getestet auf: Windows 7, Apache 2.4, Advanced Bat zu Exe Converter 2.92
Verwenden Sie den eingebauten Windows-Taskplaner, der .bat
script auslöst, der curl mit einer definierten URL aufruft.
c:\backgroundtasks
Passen Sie das Skript unten an Ihre Bedürfnisse an:
cd c: \
cd c: \ Hintergrundaufgaben
curl Ссылка
beenden
Konfigurieren Sie den Taskplaner so, dass er als Basisaufgabe ausgeführt wird:
If the task is already running...
auf Stop the existing instance
Die beste Methode wäre hier, Windows-Dienstabhängigkeiten zu verwenden.
Machen Sie eine php-websocket-server.cmd
-Datei mit allen notwendigen Umgebungseinstellungen (z. B. Wechsel zu einem Verzeichnis, Einstellen von PATH, etc ...) mit der letzten Zeile:
Installieren Sie die Windows Server Resource Kit-Tools , um% zu erhalten. co_de% und srvany
, um einen benutzerdefinierten Dienst zu erstellen. Notieren Sie den Installationspfad so, wie Sie ihn im nächsten Schritt benötigen.
Öffne eine instsrv
Shell und starte:
Erstellen Sie als Nächstes eine Datei cmd
, die folgendes enthält (Update für Ihre Umgebung):
Importieren Sie es mit einem Doppelklick oder php-websocket-server.reg
Zurück in Ihrer regedit /s php-websocket-server.reg
Shell:
Damit der Apache2.4 * -Dienst von Ihrem PHP-Dienst abhängig ist. Jetzt, wenn Apache gestartet wird, wird der php-Dienst zuerst aufgerufen. Und ebenso, wenn Sie den PHP-Dienst stoppen, wird Apache damit aufhören.
* Das Howto zeigt an, dass der Service "Apache2.4" heißt, aber Sie möchten dies möglicherweise in Ihrer Installation überprüfen.
Wenn Sie als Dienst ausgeführt werden, haben Sie kein Startscript.
Führen Sie eine Dienstimplementierung aus, die es ermöglicht, andere Programme als Dienste auszuführen, und machen Sie dann den neuen Dienst (der das Skript ausführt) eine Abhängigkeit vom Apache-Dienst. Dies wird jedoch das Skript nicht neu starten, wenn Apache neu gestartet wird.
Eine mögliche Lösung mit SrvStart und ein anderes, das ServiceEx verwendet .
Installieren Sie Apache möglicherweise nicht als Dienst und bearbeiten Sie dann das Start / Neustart-Skript und verwenden Sie die obige Methode, um Apache als Dienst auszuführen (anstatt das Apache-eigene Installationsprogramm zu verwenden).
Erstellen Sie eine Bat-Datei, zB 'myphp.bat' mit path/php myscript.php
. Enthalten Sie den richtigen Pfad zu PHP, wenn es nicht Pfad ist.
Erstellen Sie eine Bat-Datei, zB runmyphp.bat mit
AT 00:00 / alle: M, T, W, Th, F "cmd / c /pfad/myphp.bat", wiederum einschließlich des korrekten Pfades.
Verwenden Sie dann den Explorer, um runmyphp in den Autostart-Ordner zu ziehen, damit er beim Systemstart immer ausgeführt wird.
Google 'windows at command' oder 'windows cron', um die korrekte Syntax für den 'at' Befehl zu erhalten, aber Sie können im Moment eine detaillierte Erklärung finden hier .
Ich habe eine andere Antwort gefunden C: \ wamp \ scripts \ wampserver.lib.php Diese Datei wird jedes Mal ausgeführt, wenn Ihre wamp startet
Fügen Sie Ihren Dateipfad include_once("file_path");
zu dieser Datei hinzu und es ist fertig. das ist die perfekte Lösung, die Sie wollen
Viel Spaß !!!!!!!!!
Fügen Sie alle erforderlichen Prozesse in einer Batch-Datei zusammen und verwenden Sie RunAsService Mit einigen Optimierungen können Sie sicherstellen, dass Ihr Dienst vor Apache gestartet wird.
Obwohl die Lösung von Halayem Anis sehr kreativ ist, ist es wichtig zu beachten, dass Sie nie sicher sein können, dass ein PHP
Skript im Hintergrund läuft. Also, wenn Sie Ihr Skript auf "Apache Start" starten, dann beenden Sie wahrscheinlich Op Apache ziemlich oft, einfach, Ihr Skript neu zu starten.
Ich gehe davon aus, dass Sie sogar zu dieser Frage gekommen sind, da Sie auf einem normalen Server nie die Apache-Reset-Schaltfläche berühren müssen. Es startet beim Systemstart und läuft dann einfach. Wenn das der Fall wäre, könnten Sie einfach den Befehl php myscript.php
beim Start ausführen.
Da es keine Möglichkeit gibt, sicherzustellen, dass das Skript weiterläuft, würde ich einen anderen Ansatz verwenden, bei dem ich überprüfe, ob es läuft, und falls nicht, starte es neu.
Der erste Schritt besteht also darin, zu verfolgen, ob das Skript läuft. Ich würde für den einfachen Ansatz gehen, wo Ihr myscript.php
alle 5 Sekunden oder so ein einzelnes Byte in eine Datei schreibt. Auf diese Weise kann ich die letzte geänderte Zeit für die Datei verwenden, um zu sehen, ob sie noch läuft, weil last modified time + 5 seconds < now == not running
.
Sie können die letzte Zugriffszeit auch alle 5 Sekunden in einer Datenbank speichern. Ist möglicherweise etwas schneller als der Zugriff auf Dateien, wenn Sie viel Verkehr haben.
Der zweite Teil besteht darin, dass jede Anfrage prüft, ob das Skript läuft. Für diese beiden Arbeiten würde ich das PHP.ini
verwenden, um bei jeder Anfrage ein PHP-Skript voranzustellen. Sie können es mit der auto_append_file Option machen.
Dieses Vorlaufskript würde folgendermaßen funktionieren:
%Vor%Überprüfen Sie, wie filemtime und exec arbeiten und was Sie beachten müssen. Sie arbeiten etwas anders auf Windows / * nix.
Erstellen Sie Windows Batch-Dateien, um Apache und das PHP-Skript zu starten:
%Vor%Sie können auch eine Batch-Datei erstellen, die das PHP-Skript beendet und Apache stoppt:
%Vor%In den obigen Beispielen:
Apache
ist der Name des Dienstes, der in Services.msc angezeigt wird. könnte stattdessen Apache2.1 oder Apache2.2 sein C:\inetpub\scripts
ist das Verzeichnis, das das Skript enthält. Der Befehl Start wechselt in dieses Verzeichnis PHP Script 01
ist ein Label, das im Befehl Taskkill verwendet wird, um den Prozess zu finden Tags und Links php windows apache windows-server-2008-r2