Fixed compilation of messages.mc.
[nssm.git] / README.txt
index 84a34ba..abc22cd 100644 (file)
@@ -1,5 +1,5 @@
 NSSM: The Non-Sucking Service Manager\r
-Version 2.1, 2009-12-28 by Benjamin Mayrargue (www.softlion.com)\r
+Version 2.9, 2011-02-28\r
 \r
 NSSM is a service helper program similar to srvany and cygrunsrv.  It can \r
 start any application as an NT service and will restart the service if it \r
@@ -17,6 +17,16 @@ options on the command line.
 Since version 2.1, NSSM can be compiled for x64 platforms.\r
 Thanks Benjamin Mayrargue.\r
 \r
+Since version 2.2, NSSM can be configured to take different actions\r
+based on the exit code of the managed application.\r
+\r
+Since version 2.3, NSSM logs to the Windows event log more elegantly.\r
+\r
+Since version 2.5, NSSM respects environment variables in its parameters.\r
+\r
+Since version 2.8, NSSM tries harder to shut down the managed application\r
+gracefully and throttles restart attempts if the application doesn't run\r
+for a minimum amount of time.\r
 \r
 Usage\r
 -----\r
@@ -56,13 +66,59 @@ Managing the service
 --------------------\r
 NSSM will launch the application listed in the registry when you send it a \r
 start signal and will terminate it when you send a stop signal.  So far, so \r
-much like srvany.  But NSSM is the Non-Sucking service manager and will take \r
+much like srvany.  But NSSM is the Non-Sucking service manager and can take \r
 action if/when the application dies.\r
 \r
-NSSM will try to restart itself if it notices that the application died but \r
-you didn't send it a stop signal.  NSSM will keep trying, pausing 30 seconds \r
-between each attempt, until the service is successfully started or you send \r
-it a stop signal.\r
+With no configuration from you, NSSM will try to restart itself if it notices\r
+that the application died but you didn't send it a stop signal.  NSSM will\r
+keep trying, pausing between each attempt, until the service is successfully\r
+started or you send it a stop signal.\r
+\r
+NSSM will pause an increasingly longer time between subsequent restart attempts\r
+if the service fails to start in a timely manner, up to a maximum of four\r
+minutes.  This is so it does not consume an excessive amount of CPU time trying\r
+to start a failed application over and over again.  If you identify the cause\r
+of the failure and don't want to wait you can use the Windows service console\r
+(where the service will be shown in Paused state) to send a continue signal to\r
+NSSM and it will retry within a few seconds.\r
+\r
+By default, NSSM defines "a timely manner" to be within 1500 milliseconds.\r
+You can change the threshold for the service by setting the number of\r
+milliseconds as a REG_DWORD value in the registry at\r
+HKLM\SYSTEM\CurrentControlSet\Services\<service>\Parameters\AppThrottle.\r
+\r
+NSSM will look in the registry under\r
+HKLM\SYSTEM\CurrentControlSet\Services\<service>\Parameters\AppExit for\r
+string (REG_EXPAND_SZ) values corresponding to the exit code of the application.\r
+If the application exited with code 1, for instance, NSSM will look for a\r
+string value under AppExit called "1" or, if it does not find it, will\r
+fall back to the AppExit (Default) value.  You can find out the exit code\r
+for the application by consulting the system event log.  NSSM will log the\r
+exit code when the application exits.\r
+\r
+Based on the data found in the registry, NSSM will take one of three actions:\r
+\r
+If the value data is "Restart" NSSM will try to restart the application as\r
+described above.  This is its default behaviour.\r
+\r
+If the value data is "Ignore" NSSM will not try to restart the application\r
+but will continue running itself.  This emulates the (usually undesirable)\r
+behaviour of srvany.  The Windows Services console would show the service\r
+as still running even though the application has exited.\r
+\r
+If the value data is "Exit" NSSM will exit gracefully.  The Windows Services\r
+console would show the service as stopped.  If you wish to provide\r
+finer-grained control over service recovery you should use this code and\r
+edit the failure action manually.  Please note that Windows versions prior\r
+to Vista will not consider such an exit to be a failure.  On older versions\r
+of Windows you should use "Suicide" instead.\r
+\r
+If the value data is "Suicide" NSSM will simulate a crash and exit without\r
+informing the service manager.  This option should only be used for\r
+pre-Vista systems where you wish to apply a service recovery action.  Note\r
+that if the monitored application exits with code 0, NSSM will only honour a\r
+request to suicide if you explicitly configure a registry key for exit code 0.\r
+If only the default action is set to Suicide NSSM will instead exit gracefully.\r
 \r
 \r
 Removing services using the GUI\r
@@ -84,6 +140,18 @@ To remove a service without confirmation from the GUI, run
 Try not to remove essential system services...\r
 \r
 \r
+Logging\r
+-------\r
+NSSM logs to the Windows event log.  It registers itself as an event log source\r
+and uses unique event IDs for each type of message it logs.  New versions may\r
+add event types but existing event IDs will never be changed.\r
+\r
+Because of the way NSSM registers itself you should be aware that you may not\r
+be able to replace the NSSM binary if you have the event viewer open and that\r
+running multiple instances of NSSM from different locations may be confusing if\r
+they are not all the same version.\r
+\r
+\r
 Example usage\r
 -------------\r
 To install an Unreal Tournament server:\r
@@ -103,7 +171,15 @@ Studio 2008.
 \r
 Credits\r
 -------\r
+Thanks to Bernard Loh for finding a bug with service recovery.\r
 Thanks to Benjamin Mayrargue (www.softlion.com) for adding 64-bit support.\r
+Thanks to Joel Reingold for spotting a command line truncation bug.\r
+Thanks to Arve Knudsen for spotting that child processes of the monitored\r
+application could be left running on service shutdown, and that a missing\r
+registry value for AppDirectory confused NSSM.\r
+Thanks to Peter Wagemans and Laszlo Keresztfalvi for suggesting throttling restarts.\r
+Thanks to Eugene Lifshitz for finding an edge case in CreateProcess() and for\r
+advising how to build messages.mc correctly in paths containing spaces.\r
 \r
 Licence\r
 -------\r