Inhaltsverzeichnis
Programme unter Windows 2008 / Windows 10 als Service starten
Leider bittet Microsoft keinen einfaches Tool an, ein beliebiges Programm als Service zu starten.
In den Tests hat sich zum Schluss das Tool NSSM - the Non-Sucking Service Manager am besten und einfachsten herausgestellt.
Ziel ist es, ein PowerShell Script beim Start des Servers auszuführen.
Dies ließe sich eigentliche besser über den Windows Scheduler durchführen, allerdings muss VOR diesem Script der Oracle Service gestartet werden und der läuft als Dienst.
Um daher die Abhängigkeit darstellen zu können, das ganze als Service angelegt.
Hintergrund Oracle Instance für Standby im Mount Modus öffnen
NSSM - the Non-Sucking Service Manager
Download über:
Installation:
- Auspacken nach D:\tools
Starten einer administrativen Powerschell Session und Aufruf der Software:
cd D:\tools\nssm-2.24\win64 .\nssm.exe install
Über diese Oberfläche die Parameter des Service angeben:
Parameter:
- Path ⇒ %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
- Startup Dir ⇒ D:\oracle\autostart
- Paramter ⇒ -ExecutionPolicy Bypass -File D:\oracle\autostart\mount_database.ps1
Das Powershell Script für den Start der DB im Mount Modus siehe auch hier ⇒ https://orapowershell.codeplex.com/SourceControl/latest#ps/autoStart/mount_database.ps1
Unter dem Reiter Log On den DB User eintragen:
- Log on as this account - Owner der DB
Das das Script ja nach Start der DB fertig ist und der Service sich nicht ständig neu starten soll: Unter dem Reiter Exit Actions:
- Restart „No action (srvany compatible)
Test ob der Service eingerichtet ist:
C:\Windows\System32\sc.exe query "ORACLE_MOUNT"
Den Oracle Service auf „Manuel“ setzen, der Oracle Service wird auch von dem Script mit gestartet.
Quellen
siehe auch ⇒ http://www.reddit.com/r/PowerShell/comments/2bgtdh/best_practices_to_run_script_continuously_as_a/
RunAsSVC
Download über http://www.pirmasoft.de/cms/freeware/runassvc
Ein erster test war für meine Problemstellung allerdings nicht erfolgreich.
"srvany.exe" aus dem Resource Kit
Aus einem Microsoft Forum:
- At the time of this posting, there is no Windows Server 2008 Resource Kit Tools, so get the „srvany.exe “ from the „Windows Server 2003 Resource Kit Tools “ and copy it to a suitable location on your Win2008 server (e.g. C:\Windows\System32\ ).
- Use „sc “ to create a new service that launches „srvany “ (e.g. sc create MyService binPath= C:\Windows\System32\srvany.exe DisplayName= „My Custom Service“ )
- Using RegEdit : create a „Parameters “ key for your service (e.g. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService\Paramaters\ )
- Using RegEdit : within the newly created „Parameters “ key , create a string value called „Application “ and unter the full path to the application you are wanting to run as a service. (No quotes required.)
"SRVSTART.EXE - Windows NT Service Execution"
Über das freie Werkzeug „SRVSTART.EXE - Windows NT Service Execution“ von http://www.rozanski.org.uk/services lässt sich sehr gut ein Programm als Service einrichten.
Download der Software von hier: http://rozanski.org.uk/software
Einrichten am Beispiel eines speziellen Start Scripts für eine Oracle Data Guard Umgebung:
- Datei srvstart_run.v110.zip auspacken nach d:\oracle\autostart
- Init Datei mount_database.ini für den Start anlegen
[ORACLE_MOUNT] startup="%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File D:\oracle\autostart\mount_database.ps1" startup_dir="D:\oracle\autostart\" debug_out=D:\oracle\autostart\oracle_mount_srv.log shutdown_method=kill auto_restart=n
- Eigentliche Powershell Datei mount_database.ps1 anlegen mit
$stream = [System.IO.StreamWriter] "d:\debug.out" $log="LOG -- Start the the database" $stream.WriteLine($log) # do some work $stream.close()
- Service anlegen mit (in einer administrativen Powershell Session!)
cd D:\oracle\autostart .\srvstart install ORACLE_MOUNT -c D:\oracle\autostart\mount_database.ini #alternativ: C:\Windows\System32\sc.exe CREATE ORACLE_MOUNT DisplayName= "ORACLE_MOUNT" binPath= "D:\oracle\autoStart\srvstart.exe ORACLE_MOUNT -c D:\oracle\autoStart\mount_database.ini" start= auto
Nun den Service starten über:
C:\Windows\System32\sc.exe start "ORACLE_MOUNT"
Service bei Bedarf wieder löschen
C:\Windows\System32\sc.exe delete ORACLE_MOUNT # bzw. ./srvstart remove ORACLE_MOUNT
Fehler:
SRVSTART: 2015/01/31 16:56:45 ERROR severity=0 thread=2636 source=D:\Home\Author\srvstart.v110\dll\CmdRunner.cpp line=1334 text=createProcess(): failed to start process '"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File D:\oracle\autostart\mount_database.ps1"', error=267 SRVSTART: 2015/01/31 16:56:45 ERROR severity=0 thread=2636 source=D:\Home\Author\srvstart.v110\dll\CmdRunner.cpp line=1336 text=Exception 1 in Class '' method 'createProcess()'
Noch am Suchen, leider noch kein Erfolg, scheint doch nicht mehr zu funktionieren …. kann aber auch an Berechtigungen liegen? Dienst als User anmelden hilft evtl. weiter.
siehe auch:
MS Windows "sc" verwenden
Funktioniert aber nur mit Programmen die die Service Schnittstelle implementiert haben!
Mit dem Programm „sc“ kann unter Windows 2008 ein Programm als Service eingerichtet werden.
Ablauf:
- Pfad zum Programm ermitteln (je nach dem wieviele Leer und Sonderzeichen enthalten sind, Kurzform verwenden (Anzeige mit Dir /x))
- Service anlegen
- Service Eigenschaften anlegen
Beispiel:
Anlegen
!Auf das Leerzeichen nach dem “=„ achten!
dir /x d:\programme (x86)\MY prog\listener.exe rem Pfad merken sc.exe create GPIListenerService binpath= "d:\PROGRAM~2\MYPOR~\listener.exe" displayName= "GPIListenerService " error= ignore start= auto type= own rem testen sc qc GPIListenerService
Fehler
Ein möglicher Fehler ist der „error message 1053: The service did not respond to the start or control request in a timely fashion.“, oft liegt hier das Problem an Berechtigungen.
Ist das Programm aber nicht für einen Run as Service geeignet und antwortet nicht entsprechend schnell den aufrufenen Service wrapper von Windows, kann SC so einfach nicht verwendet werden.
Alternativ kann hier srvany.exe von Windows 2003 Resourcekit helfen, srvany dann wiederum mit sc einbinden.
siehe Anleitung hier: srvany.exe im MS Forum
Quellen
- sc.exe create: http://technet.microsoft.com/de-de/library/cc990289
- sc.exe config: http://technet.microsoft.com/de-de/library/cc990290