Steven K. Mariner |
Last Updated: 04-Jun-2011 |
Installing a Perl Script as a Windows Service
This is a step-by-step approach to installing a Perl script as a Service under Windows. This was formulated by reading a handful of web pages, with critical information obtained by dissecting jryan's Perl script at Perlmonks ( http://www.perlmonks.org/?node_id=230377 ).
Of course, being the Perl afficianado that you are, you've already gone to Perlmonks, right?
So -- You want to run a Perl script as a Windows Service.
In any regard, this page discusses one way to make that happen. For this technique, you'll need:
This should be deployable almost as is. About the only things you should need to change are references to where the Perl binary is located and which directory into which you drop all files from this example. I'm going to presume you can handle those things.
On all files noted here, global change and replace should be sufficient on these strings:
Without further adieu:
#!/usr/bin/perl my $statim = time; open LOGFIL, ">>perlservicetest.log"; print LOGFIL "$statim perlservicetest START\n"; close LOGFIL; exit; __END__
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\perlservicetest\Parameters] "Application"="C:\\Perl\\bin\\perl.exe" "AppDirectory"="C:\\Steve\\Dev\\perlservice-perl" "AppParameters"="C:\\Steve\\Dev\\perlservice-perl\\perlservicetest.pl"(Don't forget the extra blank line at the end; it is not optional.)
perlservicetest-install.bat :
@echo off echo ------------------------------------------------------------------------------- echo Checking logfile contents echo ------------------------------------------------------------------------------- type perlservicetest.log pause echo ------------------------------------------------------------------------------- echo Checking service status echo ------------------------------------------------------------------------------- sc qc "perlservicetest" pause echo ------------------------------------------------------------------------------- echo Stopping old service echo ------------------------------------------------------------------------------- net stop perlservicetest pause echo ------------------------------------------------------------------------------- echo Removing old service echo ------------------------------------------------------------------------------- instsrv perlservicetest remove sc qc "perlservicetest" pause echo ------------------------------------------------------------------------------- echo Installing new service echo ------------------------------------------------------------------------------- instsrv perlservicetest C:\Steve\Dev\perlservice-perl\srvany.exe sc qc "perlservicetest" pause echo ------------------------------------------------------------------------------- echo Modifying new service parameters echo ------------------------------------------------------------------------------- REM start /WAIT "Registry Update" perlservicetest.reg regedit /s C:\Steve\Dev\perlservice-perl\perlservicetest.reg pause echo ------------------------------------------------------------------------------- echo Starting new service echo ------------------------------------------------------------------------------- net start perlservicetest pause echo ------------------------------------------------------------------------------- echo Checking logfile contents echo ------------------------------------------------------------------------------- type perlservicetest.log echo -------------------------------------------------------------------------------
Okay, so after tweeking and twiddling, I wound up with the above file sets and voila! I had a working Windows Service which ran a Perl script of my own creation.
Now we need to learn how to clean up after ourselves. So -- to remove the service:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\perlservicetest\Parameters] "Application"=- "AppDirectory"=- "AppParameters"=- [-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\perlservicetest\Parameters] [-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\perlservicetest](Again, remember -- the extra blank line at the end is not optional.)
@echo off echo ------------------------------------------------------------------------------- echo Checking logfile contents echo ------------------------------------------------------------------------------- type perlservicetest.log pause echo ------------------------------------------------------------------------------- echo Checking service status echo ------------------------------------------------------------------------------- sc qc "perlservicetest" pause echo ------------------------------------------------------------------------------- echo Stopping old service echo ------------------------------------------------------------------------------- net stop perlservicetest pause echo ------------------------------------------------------------------------------- echo Removing old service echo ------------------------------------------------------------------------------- instsrv perlservicetest remove sc qc "perlservicetest" pause echo ------------------------------------------------------------------------------- echo Removing service parameters echo ------------------------------------------------------------------------------- regedit /s C:\Steve\Dev\perlservice-perl\perlservicetest-delete.reg echo -------------------------------------------------------------------------------
So, if you initially deploy this on your system, as is, changing only the items noted at the top of this page, it should work. That gives you a functioning baseline from which to begin your journey.
Once you have a functioning Windows Service Perl script, you can adjust individual components to customize it to your needs. Maybe you want instsrv.exe and srvany.exe to live somewhere common. Maybe you want to change the service name from perlservicetest . Maybe you want the Perl script to do more than write lines to a log file.
If the change you make doesn't give you the results you are looking for, roll back to the last one that worked, and keep chiseling away at it, back and forth, until you have molded it into your personal Windows Service masterpiece.
:-)
© 2011, Steven K. Mariner