ctl is an extensible application control script. It is a generic script written on ksh to control every kind of application. Control means to start, stop or monitor. The tool is currently used on Solaris environment but it's ready for Linux use as well.
Be the first to post a text review of Application environment and control. Rate and review a project by clicking thumbs up or thumbs down in the right column.
APPCTL CHANGE LOG ================= # ############################################################################# Date : 2009-06-26 CVS Tag: RELEASE_20090626 Version: 1.15 Notes: This release fixes a problem on Linux where multiple processes are running for a single handler. Changes: FIX: Fixed quoting in printf statement which could have caused errors to be shown in case handlers with multiple processes (PIDs) were used on Linux system. # ############################################################################# Date : 2009-06-24 CVS Tag: RELEASE_20090624 Version: 1.14 Notes: This release mainly brings new features. It adds extension points to hook your own extensions into the process of ctl in order to perform custom actions. The documentation has been updated accordingly. Changes: NEW: Added possibility to define a pre- and post- function for each action. For example this allows the definition of a prestop() function which is executed prior to the execution of the "stop" action (ctl stop xxx) and allows custom commands (like logging or alarming) to be inserted on these actions. The pre- and post- functions are supported for each action supported by ctl (note that the "restart" action is 'virtual' and invokes a stop and a start action). In contrast to the prestart/poststart/prestop/poststop... functions within the handler env files these functions are executed only once for each action processed. For example if you use 'ctl start handler1 handler2' this would execute the the following functions in order: - prestart() function defined in ctlenv (if applicatble) - prestart() function defined in handler1env (if applicable) - [handler1 startup] - poststart() function defined in handler1env (if applicable) - prestart() function defined in handler2env (if applicable) - [handler2 startup] - poststart() function defined in handler2env (if applicable) - poststart() function defined in ctlenv (if applicable) As you can see the pre-/post-start scripts within 'ctlenv' are executed only once. NEW: Added global pre-execution/post-execution function which can be defined by user. See PRE_EXEC_FUNCTION/POST_EXEC_FUNCTION variables in ctlenv. By default the functions are called "prerun()" and "postrun()". This allows one to hoock functions to ctl invokation in order to allow logging/alarming or other events to be processed when ctl is invoked. FIX: Fixed some small HTML code glitches in the documentation. # ############################################################################# Date : 2007-04-29 CVS Tag: RELEASE_20070429 Version: 1.13 Notes: This release fixes the linux status message printout where the PID was omitted from the printout. This does not affect the functionality at all. Just the output thext has been fixed. Added: [none] Fixes: - Output of PID on Linux status printout fixed. Changes: [none] # ############################################################################# Date : 2007-02-08 CVS Tag: RELEASE_20070208 Version: 1.12 Notes: Comment fixes and new PRIORITY feature. Added: - Added PRIORITY variable which allows definition of process priority. This parameter can be set in ctlenv (globally for all handlers) as well as handler-env files for a specific handler only. Fixes: [none] Changes: - Fixed some comments, no functional changes # ############################################################################# Date : 2006-12-20 CVS Tag: RELEASE_20061220 Version: 1.11 Notes: The recently introduced feature to allow custom PIDFILE location specification was not working properly in case multiple handlers were specified in ctlenv. All PIDs were redirected to the PID file of the first handler which caused messages about invalid PIDs for this handler. Since no PID files were written for other handlers they were treated as handlers without PID files (PIDLESS_MODE). In most cases this was not creating any problems except the ugly warnings about wrong PIDs. This release fixes the problem along with another cosmetical update that a debug message in the status function was printed to stdout instead of stderr. This is only relevant if DEBUG is enabled. Added: [none] Fixes: - PID file handling fixed when using multiple handlers. - Debug output of status function fixed Changes: [none] # ############################################################################# Date : 2006-12-12 CVS Tag: RELEASE_20061212 Version: 1.10 Notes: This update is a minor functionality enhancement. It allows the usage of pipes inside the ARGUMENTS parameter for a handler. This allows piping STDOUT through programs like 'sed' or piping the output to an external logging program. Added: - Using pipes on the ARGUMENTS parameter is now allowed. Fixes: [none] Changes: - Internal enhancements and re-structuring. - PID listing does not print extra linefeed if list is empty. - On PID-listing the output of pre- and post-status scripts are omitted. This assures that only the PID numbers are written to STDOUT. # ############################################################################# Date : 2006-11-27 CVS Tag: RELEASE_20061127 Version: 1.9 Notes: This update just adds some new features. The internal functionality bas basically introduced by the last update. Added: - New action 'statuscheck' introduced. This action does the same as 'status' or 'pidlist' but does not print anything on screen. Just the exit value is set. Fixes: [none] Changes: - The 'pidlist' action now exits with the same exit status as the 'status' action. This improves usability when used within an external script/program. - Removed extra linefeed at the end of the output. # ############################################################################# Date : 2006-11-24 CVS Tag: RELEASE_20061124 Version: 1.8 Notes: This update adds some new features. It allows to use pre-/post-start/stop/status scripts. Additionally the function names for the "startup", "shutdown" and "status" shell function are now fully configurable. Refer to the following variables (can be set in ctlenv and module env file): Definitions for external script names: PRESTART_EXTENSION (extension for custom pre-startup script) START_EXTENSION (extension for custom startup script) POSTSTART_EXTENSION (extension for custom post-startup script) PRESTOP_EXTENSION (extension for custom pre-shutdown script) STOP_EXTENSION (extension for custom shutdown script) POSTSTOP_EXTENSION (extension for custom post-shutdown script) PRESTATUS_EXTENSION (extension for custom pre-status script) STATUS_EXTENSION (extension for custom status script) POSTSTATUS_EXTENSION (extension for custom post-status script) Definitions for function names: PRESTART_FUNCTION (function name of custom pre-startup function) START_FUNCTION (function name of custom startup function) POSTSTART_FUNCTION (function name of custom post-startup function) PRESTOP_FUNCTION (function name of custom pre-stop function) STOP_FUNCTION (function name of custom stop function) POSTSTOP_FUNCTION (function name of custom post-stop function) PRESTATUS_FUNCTION (function name of custom pre-status function) STATUS_FUNCTION (function name of custom status function) POSTSTATUS_FUNCTION (function name of custom post-status function) Additionally this update adds the possibility to define a PIDFILE variable. If definied in a module environment file it defines where the PID file is written or read from. This is useful if an application has a hard-coded PID path and cannot be re-configured to use $PID_BASE/[module].pid Fixes: [none] Changes: see notes # ############################################################################# Date : 2006-09-18 CVS Tag: RELEASE_20060918 Version: 1.7 Notes: This update addresses a bug where ctl showed a not running handler in case the PID of ctl itself at execution time is a part of the handler command line (handler name, path or arguments). For example if the handler is called 'handler5' and the script got PID '5' then it was unable to locate a running 'handler5'. Note that this problem only occures in pidless-mode. In case PID-files are used (default) this problem will not occur. This bug is almost of no effect when ctl is invoked manually. If the application is wrongly reported to be down an administrator would usually try to restart it. At this time it's extremely unlikely for this bug to happen again and therefore ctl will just print a message that the application is already running. Of course this could be confusing for the administrator but a subsequent status call will list the running application again. However clustered installations where frequent checks without re-starting or re-checking in case of reported failure. That's why it's recommended to upgrade in case you're running a clustered environment with an application in pidless- mode. Fixes: FIX: In case the command line fully contains the PID of the script at execution time it was unable to locate the process in pidless-mode. For example if the handler is called 'handler5' and the script got PID '5' then it was unable to locate a running 'handler5'. This also occures in case the PID is a part of other command-line parts. This is very unlikely to happen but nevertheless could occur. In case it happens then a non-running handler will be reported which might cause an unwanted cluster failover or just cause some confusion. Please note that this problem could only occur in case pidless-mode is used. Changes: [none] # ############################################################################# Date : 2006-09-15 CVS Tag: RELEASE_20060915 Version: 1.6 Notes: This update addresses a bug where ctl showed a not running handler in case the PID of ctl itself at execution time is a subset of the handler PID. For example if the handler uses PID "4567" and ctl is executed on PID "456". This is very unlikely to happen and additionally only happens in pidless-mode where no PID files are used. However in clustered environments where ctl is invoked quite often (periodically) it might occur in rare cases. If then the cluster does not try to restart the application it might initiate a failover. Since clusters are usually trying to restart a failed application at least once this might never be the case in your environment since it's almost impossible for this problem to happen twice in a row. This bug is almost of no effect when ctl is invoked manually. If the application is wrongly reported to be down an administrator would usually try to restart it. At this time it's extremely unlikely for this bug to happen again and therefore ctl will just print a message that the application is already running. Of course this could be confusing for the administrator but a subsequent status call will list the running application again. Fixes: FIX: In cases when the process PID was a subset of the script script PID at runtime then it was unable to find a process in pidless-mode. For example when the process had ID "1234" and the script got the PID "234". This has been fixed now. Changes: MOD: Changed default behaviour not to write PID files. MOD: Now updates the status of a handler right after shutdown. This prevents messages about wrong PID in PID files on a directly following status request in case the handler is not removing the PID from the PID file by itself. # ############################################################################# Date : 2006-07-14 CVS Tag: RELEASE_20060714 Version: 1.5 Notes: This update adds another configuration flag: PID_WRITE. It allows disabling of writing the PID file at startup since some handlers do not work if their PID is already present in the PID file they are going to write (Apache). The new parameter can be set globally in $RUN/ctlenv or in any handler env file. Fixes: FIX: Fixed some comments and outputs. Changes: NEW: Added PID_WRITE configuration flag to allow enabling/disabling writing of PID file during handler startup. This allows disabling PID file writing in case the handler writes one by itself. MOD: When invoked as root the script no longer asks for a user name. This even allows running handlers as root. MOD: Added output if a non-running handler is stopped. # ############################################################################# Date : 2006-07-08 CVS Tag: RELEASE_20060708 Version: 1.4 Notes: This update only affects PIDLESS_MODE. If you do not use PIDLESS_MODE then there is no need to upgrade. However this release is fully backwards compatible and updating is recommended anyway. Fixes: FIX: Status evaluation at startup failed in PIDLESS mode or if no PID file exists Changes: NEW: Template for PIDLESS_MODE added to ctlenv # ############################################################################# Date : 2006-06-09 CVS Tag: RELEASE_20060609 Version: 1.3 Notes: This is another feature upgrade. If ctl worked for you before there is no need to upgrade. This release might add some features which might help to control misbehaving applications. It also allows improved debugging. Fixes: FIX: Timeout for maintenance warning timeout is now accepted from congiguration file. Changes: NEW: START_TIMEOUT_MIN allows definition of minimal startup time NEW: START_TIMEOUT_MAX allows definition of maximal startup time NEW: SHUTDOWN_SIGNALS_ONCE allows definition of signals to be sent once at handler shutdown NEW: SHUTDOWN_SIGNALS_REP allows definition of signals to be sent repeatedly at shotdown NEW: SHUTDOWN_REP_WAIT allows definition of timeout between signals sent once and repeatedly sent signals NEW: ASSURE_SHUTDOWN allows enabling/disabling forced shutdown after timeout MOD: Fixed some typos in messages and comments # ############################################################################# Date : 2005-12-25 CVS Tag: RELEASE_20051225 Version: 1.2 Notes: This is just a simple feature upgrade. If ctl worked for you before there is no need to upgrade. This release might be useful for you if you plan to use it outside of the framework or if you experienced problems on your Linux version. Fixes: [none] Changes: - NEW: Added possibility to run without envsetup. If envsetup was not sourced then ctl detects and exports environment variables by itself - MOD: Extended ostype recognition for some Linux systems - MOD: External dependency on wc removed # ############################################################################# Date : 2005-10-22 CVS Tag: RELEASE_20051022_1 Version: 1.1 Notes: This is an enhanced release with new features. No fixes were done. This release is fully backwards compatible - no changes to any other file needed. Fixes: [none] Changes: - NEW: Usage screen completely reworked. It is much more descriptive no and includes some examples as well - NEW: Introduced PID-less mode. If this mode is activated ctl works completely without PID files. Note: This only works for handlers started/stopped by ctl directly when no start/stop script/function is used. - NEW: New action added: 'restart' to restart a running handler - NEW: Checking of PIDs in PID file (only if no startup script is used) Now checks if a PID belongs to the right process (by name) Invalid PIDs (including PIDs refering to a wrong process) are removed In case a startup script or startup function is used the tool cannot know if the PID is correct. In this case the startup/stop/status scripts/functions have to handle the PID files correctly - NEW: Externalized settings. Now it is possible to set configuration values on the environment or in the env file # ############################################################################# Date : 2005-10-22 CVS Tag: RELEASE_20051022 Version: 1.0 Notes: This is the initial release of the appctl framework. Some tests on JBoss and Tomcat had been performed on Linux nd Solaris. Fixes: [none] Changes: [none] # #############################################################################
APPCTL CHANGE LOG ================= # ############################################################################# Date : 2009-06-24 CVS Tag: RELEASE_20090624 Version: 1.14 Notes: This release mainly brings new features. It adds extension points to hook your own extensions into the process of ctl in order to perform custom actions. The documentation has been updated accordingly. Changes: NEW: Added possibility to define a pre- and post- function for each action. For example this allows the definition of a prestop() function which is executed prior to the execution of the "stop" action (ctl stop xxx) and allows custom commands (like logging or alarming) to be inserted on these actions. The pre- and post- functions are supported for each action supported by ctl (note that the "restart" action is 'virtual' and invokes a stop and a start action). In contrast to the prestart/poststart/prestop/poststop... functions within the handler env files these functions are executed only once for each action processed. For example if you use 'ctl start handler1 handler2' this would execute the the following functions in order: - prestart() function defined in ctlenv (if applicatble) - prestart() function defined in handler1env (if applicable) - [handler1 startup] - poststart() function defined in handler1env (if applicable) - prestart() function defined in handler2env (if applicable) - [handler2 startup] - poststart() function defined in handler2env (if applicable) - poststart() function defined in ctlenv (if applicable) As you can see the pre-/post-start scripts within 'ctlenv' are executed only once. NEW: Added global pre-execution/post-execution function which can be defined by user. See PRE_EXEC_FUNCTION/POST_EXEC_FUNCTION variables in ctlenv. By default the functions are called "prerun()" and "postrun()". This allows one to hoock functions to ctl invokation in order to allow logging/alarming or other events to be processed when ctl is invoked. FIX: Fixed some small HTML code glitches in the documentation. # ############################################################################# Date : 2007-04-29 CVS Tag: RELEASE_20070429 Version: 1.13 Notes: This release fixes the linux status message printout where the PID was omitted from the printout. This does not affect the functionality at all. Just the output thext has been fixed. Added: [none] Fixes: - Output of PID on Linux status printout fixed. Changes: [none] # ############################################################################# Date : 2007-02-08 CVS Tag: RELEASE_20070208 Version: 1.12 Notes: Comment fixes and new PRIORITY feature. Added: - Added PRIORITY variable which allows definition of process priority. This parameter can be set in ctlenv (globally for all handlers) as well as handler-env files for a specific handler only. Fixes: [none] Changes: - Fixed some comments, no functional changes # ############################################################################# Date : 2006-12-20 CVS Tag: RELEASE_20061220 Version: 1.11 Notes: The recently introduced feature to allow custom PIDFILE location specification was not working properly in case multiple handlers were specified in ctlenv. All PIDs were redirected to the PID file of the first handler which caused messages about invalid PIDs for this handler. Since no PID files were written for other handlers they were treated as handlers without PID files (PIDLESS_MODE). In most cases this was not creating any problems except the ugly warnings about wrong PIDs. This release fixes the problem along with another cosmetical update that a debug message in the status function was printed to stdout instead of stderr. This is only relevant if DEBUG is enabled. Added: [none] Fixes: - PID file handling fixed when using multiple handlers. - Debug output of status function fixed Changes: [none] # ############################################################################# Date : 2006-12-12 CVS Tag: RELEASE_20061212 Version: 1.10 Notes: This update is a minor functionality enhancement. It allows the usage of pipes inside the ARGUMENTS parameter for a handler. This allows piping STDOUT through programs like 'sed' or piping the output to an external logging program. Added: - Using pipes on the ARGUMENTS parameter is now allowed. Fixes: [none] Changes: - Internal enhancements and re-structuring. - PID listing does not print extra linefeed if list is empty. - On PID-listing the output of pre- and post-status scripts are omitted. This assures that only the PID numbers are written to STDOUT. # ############################################################################# Date : 2006-11-27 CVS Tag: RELEASE_20061127 Version: 1.9 Notes: This update just adds some new features. The internal functionality bas basically introduced by the last update. Added: - New action 'statuscheck' introduced. This action does the same as 'status' or 'pidlist' but does not print anything on screen. Just the exit value is set. Fixes: [none] Changes: - The 'pidlist' action now exits with the same exit status as the 'status' action. This improves usability when used within an external script/program. - Removed extra linefeed at the end of the output. # ############################################################################# Date : 2006-11-24 CVS Tag: RELEASE_20061124 Version: 1.8 Notes: This update adds some new features. It allows to use pre-/post-start/stop/status scripts. Additionally the function names for the "startup", "shutdown" and "status" shell function are now fully configurable. Refer to the following variables (can be set in ctlenv and module env file): Definitions for external script names: PRESTART_EXTENSION (extension for custom pre-startup script) START_EXTENSION (extension for custom startup script) POSTSTART_EXTENSION (extension for custom post-startup script) PRESTOP_EXTENSION (extension for custom pre-shutdown script) STOP_EXTENSION (extension for custom shutdown script) POSTSTOP_EXTENSION (extension for custom post-shutdown script) PRESTATUS_EXTENSION (extension for custom pre-status script) STATUS_EXTENSION (extension for custom status script) POSTSTATUS_EXTENSION (extension for custom post-status script) Definitions for function names: PRESTART_FUNCTION (function name of custom pre-startup function) START_FUNCTION (function name of custom startup function) POSTSTART_FUNCTION (function name of custom post-startup function) PRESTOP_FUNCTION (function name of custom pre-stop function) STOP_FUNCTION (function name of custom stop function) POSTSTOP_FUNCTION (function name of custom post-stop function) PRESTATUS_FUNCTION (function name of custom pre-status function) STATUS_FUNCTION (function name of custom status function) POSTSTATUS_FUNCTION (function name of custom post-status function) Additionally this update adds the possibility to define a PIDFILE variable. If definied in a module environment file it defines where the PID file is written or read from. This is useful if an application has a hard-coded PID path and cannot be re-configured to use $PID_BASE/[module].pid Fixes: [none] Changes: see notes # ############################################################################# Date : 2006-09-18 CVS Tag: RELEASE_20060918 Version: 1.7 Notes: This update addresses a bug where ctl showed a not running handler in case the PID of ctl itself at execution time is a part of the handler command line (handler name, path or arguments). For example if the handler is called 'handler5' and the script got PID '5' then it was unable to locate a running 'handler5'. Note that this problem only occures in pidless-mode. In case PID-files are used (default) this problem will not occur. This bug is almost of no effect when ctl is invoked manually. If the application is wrongly reported to be down an administrator would usually try to restart it. At this time it's extremely unlikely for this bug to happen again and therefore ctl will just print a message that the application is already running. Of course this could be confusing for the administrator but a subsequent status call will list the running application again. However clustered installations where frequent checks without re-starting or re-checking in case of reported failure. That's why it's recommended to upgrade in case you're running a clustered environment with an application in pidless- mode. Fixes: FIX: In case the command line fully contains the PID of the script at execution time it was unable to locate the process in pidless-mode. For example if the handler is called 'handler5' and the script got PID '5' then it was unable to locate a running 'handler5'. This also occures in case the PID is a part of other command-line parts. This is very unlikely to happen but nevertheless could occur. In case it happens then a non-running handler will be reported which might cause an unwanted cluster failover or just cause some confusion. Please note that this problem could only occur in case pidless-mode is used. Changes: [none] # ############################################################################# Date : 2006-09-15 CVS Tag: RELEASE_20060915 Version: 1.6 Notes: This update addresses a bug where ctl showed a not running handler in case the PID of ctl itself at execution time is a subset of the handler PID. For example if the handler uses PID "4567" and ctl is executed on PID "456". This is very unlikely to happen and additionally only happens in pidless-mode where no PID files are used. However in clustered environments where ctl is invoked quite often (periodically) it might occur in rare cases. If then the cluster does not try to restart the application it might initiate a failover. Since clusters are usually trying to restart a failed application at least once this might never be the case in your environment since it's almost impossible for this problem to happen twice in a row. This bug is almost of no effect when ctl is invoked manually. If the application is wrongly reported to be down an administrator would usually try to restart it. At this time it's extremely unlikely for this bug to happen again and therefore ctl will just print a message that the application is already running. Of course this could be confusing for the administrator but a subsequent status call will list the running application again. Fixes: FIX: In cases when the process PID was a subset of the script script PID at runtime then it was unable to find a process in pidless-mode. For example when the process had ID "1234" and the script got the PID "234". This has been fixed now. Changes: MOD: Changed default behaviour not to write PID files. MOD: Now updates the status of a handler right after shutdown. This prevents messages about wrong PID in PID files on a directly following status request in case the handler is not removing the PID from the PID file by itself. # ############################################################################# Date : 2006-07-14 CVS Tag: RELEASE_20060714 Version: 1.5 Notes: This update adds another configuration flag: PID_WRITE. It allows disabling of writing the PID file at startup since some handlers do not work if their PID is already present in the PID file they are going to write (Apache). The new parameter can be set globally in $RUN/ctlenv or in any handler env file. Fixes: FIX: Fixed some comments and outputs. Changes: NEW: Added PID_WRITE configuration flag to allow enabling/disabling writing of PID file during handler startup. This allows disabling PID file writing in case the handler writes one by itself. MOD: When invoked as root the script no longer asks for a user name. This even allows running handlers as root. MOD: Added output if a non-running handler is stopped. # ############################################################################# Date : 2006-07-08 CVS Tag: RELEASE_20060708 Version: 1.4 Notes: This update only affects PIDLESS_MODE. If you do not use PIDLESS_MODE then there is no need to upgrade. However this release is fully backwards compatible and updating is recommended anyway. Fixes: FIX: Status evaluation at startup failed in PIDLESS mode or if no PID file exists Changes: NEW: Template for PIDLESS_MODE added to ctlenv # ############################################################################# Date : 2006-06-09 CVS Tag: RELEASE_20060609 Version: 1.3 Notes: This is another feature upgrade. If ctl worked for you before there is no need to upgrade. This release might add some features which might help to control misbehaving applications. It also allows improved debugging. Fixes: FIX: Timeout for maintenance warning timeout is now accepted from congiguration file. Changes: NEW: START_TIMEOUT_MIN allows definition of minimal startup time NEW: START_TIMEOUT_MAX allows definition of maximal startup time NEW: SHUTDOWN_SIGNALS_ONCE allows definition of signals to be sent once at handler shutdown NEW: SHUTDOWN_SIGNALS_REP allows definition of signals to be sent repeatedly at shotdown NEW: SHUTDOWN_REP_WAIT allows definition of timeout between signals sent once and repeatedly sent signals NEW: ASSURE_SHUTDOWN allows enabling/disabling forced shutdown after timeout MOD: Fixed some typos in messages and comments # ############################################################################# Date : 2005-12-25 CVS Tag: RELEASE_20051225 Version: 1.2 Notes: This is just a simple feature upgrade. If ctl worked for you before there is no need to upgrade. This release might be useful for you if you plan to use it outside of the framework or if you experienced problems on your Linux version. Fixes: [none] Changes: - NEW: Added possibility to run without envsetup. If envsetup was not sourced then ctl detects and exports environment variables by itself - MOD: Extended ostype recognition for some Linux systems - MOD: External dependency on wc removed # ############################################################################# Date : 2005-10-22 CVS Tag: RELEASE_20051022_1 Version: 1.1 Notes: This is an enhanced release with new features. No fixes were done. This release is fully backwards compatible - no changes to any other file needed. Fixes: [none] Changes: - NEW: Usage screen completely reworked. It is much more descriptive no and includes some examples as well - NEW: Introduced PID-less mode. If this mode is activated ctl works completely without PID files. Note: This only works for handlers started/stopped by ctl directly when no start/stop script/function is used. - NEW: New action added: 'restart' to restart a running handler - NEW: Checking of PIDs in PID file (only if no startup script is used) Now checks if a PID belongs to the right process (by name) Invalid PIDs (including PIDs refering to a wrong process) are removed In case a startup script or startup function is used the tool cannot know if the PID is correct. In this case the startup/stop/status scripts/functions have to handle the PID files correctly - NEW: Externalized settings. Now it is possible to set configuration values on the environment or in the env file # ############################################################################# Date : 2005-10-22 CVS Tag: RELEASE_20051022 Version: 1.0 Notes: This is the initial release of the appctl framework. Some tests on JBoss and Tomcat had been performed on Linux nd Solaris. Fixes: [none] Changes: [none] # #############################################################################
I just added a couple of extension points. Now ctl allows to define functions which are executed before and after execution.
Be the first person to add a text review.
Copyright © 2009 Geeknet, Inc. All rights reserved. Terms of Use
Thanks for your rating!
Would you also like to write a review?