Created
August 13, 2011 20:46
-
-
Save kentfredric/1144231 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/psmon-1.29/Changes b/psmon-1.29/Changes | |
new file mode 100644 | |
index 0000000..623d5b8 | |
--- /dev/null | |
+++ b/psmon-1.29/Changes | |
@@ -0,0 +1,604 @@ | |
+2005-04-14 16:43 nicolaw | |
+ | |
+ * bin/psmon: Re-ordered some POD | |
+ | |
+2005-04-14 16:37 nicolaw | |
+ | |
+ * bin/psmon: Fixed daemonise() so that it will work on non-Linux | |
+ platforms. Fixed LOG_PERROR being used on platforms which do not | |
+ support it. Fixed use of /usr/sbin/sendmail to check for | |
+ existance of /lib/sendmail also. Added some more recent | |
+ performance values in the POD. | |
+ | |
+2005-04-13 22:57 nicolaw | |
+ | |
+ * etc/psmon.conf: Fixed bug with legacy config option NotifyEmail | |
+ not getting translated to AdminEmail option, and calling of | |
+ alert() method. | |
+ | |
+2005-04-13 22:57 nicolaw | |
+ | |
+ * bin/psmon: Fixed bug with legacy config option NotifyEmail not | |
+ getting translated to AdminEmail option, and calling of alert() | |
+ method. Removed depreciated dump of various /proc information in | |
+ alert emails in favor of spawn and kill command stdout and stderr | |
+ and exit values etc. | |
+ | |
+2005-04-13 18:32 nicolaw | |
+ | |
+ * Changes: Commited new log items from CVS | |
+ | |
+2005-04-13 18:29 nicolaw | |
+ | |
+ * bin/psmon: Abstracted syslog and email logging to a seperate OO | |
+ module so that Unix::Syslog and Net::SMTP can be made optional | |
+ modules in the next release instead of mandatory. Added the | |
+ defaultemailmethod configuration directive. | |
+ | |
+2005-03-31 15:47 nicolaw | |
+ | |
+ * META.yml: Updating | |
+ | |
+2005-03-02 12:35 nicolaw | |
+ | |
+ * META.yml: [no log message] | |
+ | |
+2005-03-02 12:34 nicolaw | |
+ | |
+ * bin/psmon: Fixed some typos in the POD | |
+ | |
+2005-03-02 12:34 nicolaw | |
+ | |
+ * bin/psmon-config: Fixed some more defaults | |
+ | |
+2005-03-02 12:15 nicolaw | |
+ | |
+ * bin/psmon-config: Fixed a default value | |
+ | |
+2005-03-02 12:10 nicolaw | |
+ | |
+ * bin/psmon-config: Fixed a directive | |
+ | |
+2005-03-02 12:08 nicolaw | |
+ | |
+ * bin/psmon: Removed some old commented out code, fixed some | |
+ space/tabbing and corrected some POD and a directive | |
+ mismatch/error | |
+ | |
+2005-03-02 11:49 nicolaw | |
+ | |
+ * bin/recent/: psmon, psmon.pod: Adding | |
+ | |
+2005-03-02 11:48 nicolaw | |
+ | |
+ * Makefile.PL: Added psmon-config | |
+ | |
+2005-03-02 11:48 nicolaw | |
+ | |
+ * support/commit.sh: Changed hostname and not to update readme on | |
+ the fly | |
+ | |
+2005-03-02 11:47 nicolaw | |
+ | |
+ * support/README.old: Moved from the old ../README | |
+ | |
+2005-03-02 11:47 nicolaw | |
+ | |
+ * README: Shortened | |
+ | |
+2005-03-02 11:44 nicolaw | |
+ | |
+ * support/install.sh: Updated to handle psmon-config | |
+ | |
+2005-03-02 11:32 nicolaw | |
+ | |
+ * bin/strip_pod.pl: [no log message] | |
+ | |
+2005-03-02 11:22 nicolaw | |
+ | |
+ * MANIFEST: Typo | |
+ | |
+2005-03-02 11:20 nicolaw | |
+ | |
+ * MANIFEST: Added psmon-config | |
+ | |
+2005-03-02 01:27 nicolaw | |
+ | |
+ * Makefile.PL: Added psmon-config | |
+ | |
+2005-03-02 01:25 nicolaw | |
+ | |
+ * bin/psmon-config: Adding | |
+ | |
+2005-02-17 17:42 nicolaw | |
+ | |
+ * bin/strip_pod.pl: Output pod to STDERR and code to STDOUT | |
+ | |
+2005-02-17 17:35 nicolaw | |
+ | |
+ * bin/strip_pod.pl: Adding for development aid | |
+ | |
+2005-01-14 01:56 nicolaw | |
+ | |
+ * support/psmon.html: Updated HTML from new POD | |
+ | |
+2005-01-14 01:56 nicolaw | |
+ | |
+ * bin/psmon: Typo - missing eol ; | |
+ | |
+2004-11-11 23:08 nicolaw | |
+ | |
+ * bin/psmon: Interim update migrating to cleaner OO syntax | |
+ | |
+2004-10-12 13:55 nicolaw | |
+ | |
+ * bin/psmon: Added better handling for figuring out where to write | |
+ a valid pid file so that multiple instances can be run at once on | |
+ a multiuser system. Added better handling to figure out which | |
+ config file to use, and when to only scan for the local user's | |
+ processes instead of everyones | |
+ | |
+2004-10-12 11:47 nicolaw | |
+ | |
+ * META.yml, install.sh, support/install.sh, support/psmon.html: | |
+ Fixed typo | |
+ | |
+2004-08-02 04:56 nicolaw | |
+ | |
+ * bin/psmon: Corrected some problems with imported symbols and | |
+ module loading on some systems and versions of perl. | |
+ | |
+2004-08-02 04:55 nicolaw | |
+ | |
+ * META.yml: [no log message] | |
+ | |
+2004-08-01 13:19 nicolaw | |
+ | |
+ * bin/psmon: [no log message] | |
+ | |
+2004-08-01 13:09 nicolaw | |
+ | |
+ * bin/psmon: Added OSNAME and SCRIPT CATEGORIES for CPAN script | |
+ archive indexing | |
+ | |
+2004-08-01 11:43 nicolaw | |
+ | |
+ * COPYING, Changes, INSTALL, MANIFEST, META.yml, Makefile.PL, | |
+ README, TODO, install.sh, bin/psmon, etc/psmon.conf, | |
+ support/commit.sh, support/install.sh, support/perldoc.css, | |
+ support/psmon.html: [no log message] | |
+ | |
+2004-08-01 11:31 nicolaw | |
+ | |
+ * install.sh: Symlink | |
+ | |
+2004-08-01 11:29 nicolaw | |
+ | |
+ * COPYING, Changes, INSTALL, MANIFEST, META.yml, Makefile.PL, | |
+ README, TODO, bin/psmon, etc/psmon.conf, support/commit.sh, | |
+ support/install.sh, support/perldoc.css, support/psmon.html: | |
+ Initial import in to new CVS repository after the old one was | |
+ lost | |
+ | |
+2004-08-01 11:29 nicolaw | |
+ | |
+ * COPYING, Changes, INSTALL, MANIFEST, META.yml, Makefile.PL, | |
+ README, TODO, bin/psmon, etc/psmon.conf, support/commit.sh, | |
+ support/install.sh, support/perldoc.css, support/psmon.html: | |
+ Initial revision | |
+ | |
+2003-03-26 14:17 nicolaw | |
+ | |
+ * psmon (1.58), psmon.html (1.4): First commit to try and get | |
+ cmndline =~ regex checking based process scope rules. This is | |
+ currently only working to respawn dead process, and does not yet | |
+ know how to describe what it is restarting when logging and | |
+ notifying. | |
+ | |
+2003-03-26 09:22 nicolaw | |
+ | |
+ * README (1.2), psmon.1 (1.2), psmon.html (1.3): Updated docs | |
+ | |
+2003-03-25 14:22 tag rel-1-0-4 | |
+ | |
+2003-03-25 14:22 nicolaw | |
+ | |
+ * psmon.conf (1.17, rel-1-0-4): Updated default config to include | |
+ some more daemons and additional help. | |
+ | |
+2003-03-25 13:32 nicolaw | |
+ | |
+ * psmon (1.57, rel-1-0-4): Small fixes | |
+ | |
+2003-03-25 11:01 nicolaw | |
+ | |
+ * psmon (1.56): Removed an old DEBUG line | |
+ | |
+2003-03-25 11:00 nicolaw | |
+ | |
+ * psmon (1.55): Mar 24 17:53:21 nicolaw psmon[11657]: Removing stale | |
+ PID file. Mar 24 17:53:21 nicolaw psmon[11657]: Forking background | |
+ daemon, process 11658. Mar 24 17:53:21 nicolaw psmon[11658]: Forking | |
+ second background daemon, process 11659. Mar 24 17:53:21 nicolaw | |
+ psmon[11659]: Terminating. | |
+ | |
+ This bug was reported by Jordan Lederman <jlederma@advance.net> on | |
+ Mon 24 Mar 2003. Daemon spawned psmon instances seem to die | |
+ immediatelty after forking for the second time. The while PID file | |
+ exists loop was checking against the old $O{pidfile} variable | |
+ container which is now moved to a locally scoped lexical withing | |
+ the main look and daemonize function. | |
+ | |
+2003-03-24 18:00 nicolaw | |
+ | |
+ * psmon (1.54), psmon.html (1.2, rel-1-0-4): Interim commit to fix | |
+ a --daemon spawn bug | |
+ | |
+2003-03-20 16:21 tag rel-1-0-3 | |
+ | |
+2003-03-20 16:21 nicolaw | |
+ | |
+ * README (1.1, rel-1-0-4), psmon.1 (1.1, rel-1-0-4), psmon.html | |
+ (1.1) (utags: rel-1-0-3): Updating refreshed documentation | |
+ | |
+2003-03-20 16:14 nicolaw | |
+ | |
+ * psmon (1.53, rel-1-0-3): Added the KillCmd directive to kill | |
+ processes using a user defined command insted of or in addition to | |
+ just sending a regular SIGKILL signal to the process. | |
+ | |
+ Moved the printing of sysvinit style statuses to a seperate | |
+ subroutine which decides what to print and when to surpress output. | |
+ | |
+ Changed the way that dryruns are detected at spawn and kill time so | |
+ that only one set of log and status messages have to be maintained. | |
+ | |
+2003-03-20 13:37 nicolaw | |
+ | |
+ * psmon (1.52): Added the NeverKillPID and NeverKillProcessName | |
+ directives. | |
+ | |
+2003-03-20 12:56 nicolaw | |
+ | |
+ * psmon (1.51): Got rid of the following global variables in to the | |
+ %O hash: $PIDFILE, $DEFAULT_CONFIG_FILE, $CONFIG_FILE, $DAEMON, | |
+ $CRON, $DRYRUN, $USER, $ADMINEMAIL | |
+ | |
+2003-03-19 17:22 tag rel-1-0-2 | |
+ | |
+2003-03-19 17:22 nicolaw | |
+ | |
+ * psmon (1.50, rel-1-0-2): Fixed major bug whereby the --user | |
+ option code somehow appeared to be complete rubbish, and therefore | |
+ would have either always scanned all or none of the process table | |
+ instead of just those processes owned by the specified user. This | |
+ is now fixed and will be tested shortly. | |
+ | |
+ Moved the killing and spawning actions out in to two seperate | |
+ subroutines that are called by the main check_processtable() | |
+ routine. This makes the code slightly easier to read, and will | |
+ make adding the new killcmd and related commands slightly easier to | |
+ insert. | |
+ | |
+ Added validation for the lastsafepid configuration directive to | |
+ ensure it's value is always numeric. | |
+ | |
+ Changed the loglevel of reporting of saving protected PIDs from | |
+ death from INFO to whatever the defined loglevel for that process | |
+ is. If there is none defined then the default loglevel will be | |
+ applied. | |
+ | |
+2003-03-17 15:06 tag rel-1-0-1 | |
+ | |
+2003-03-17 15:06 nicolaw | |
+ | |
+ * psmon (1.49, rel-1-0-1): I completely missed the fix meant for | |
+ the last commit! | |
+ | |
+2003-03-17 13:44 nicolaw | |
+ | |
+ * psmon (1.48): Added isnumeric() function to cope with potentially | |
+ non-numeric output from config and process table scan when numeric | |
+ is expected. In response to bug reported by Andy Brown | |
+ <andybrown21@hotmail.com> | |
+ | |
+2003-03-14 14:25 nicolaw | |
+ | |
+ * commit.sh (1.4, rel-1-0-4, rel-1-0-3, rel-1-0-2, rel-1-0-1): | |
+ Added README and updated commit.sh to automatically regenerate it. | |
+ | |
+2003-03-14 12:28 nicolaw | |
+ | |
+ * COPYING (1.1, rel-1-0-4, rel-1-0-3, rel-1-0-2, rel-1-0-1), | |
+ commit.sh (1.3), install.sh (1.6, rel-1-0-4, rel-1-0-3, rel-1-0-2, | |
+ rel-1-0-1), perldoc.css (1.2, rel-1-0-4, rel-1-0-3, rel-1-0-2, | |
+ rel-1-0-1), psmon (1.47), psmon.conf (1.16, rel-1-0-3, rel-1-0-2, | |
+ rel-1-0-1): Added GPL license details to the header of all relevant | |
+ files, and added http://www.gnu.org/licenses/gpl.txt to the file | |
+ COPYING in order to be compliant with GPL practices. | |
+ | |
+2003-03-13 11:53 nicolaw | |
+ | |
+ * install.sh (1.5): Updated man page installation | |
+ | |
+2003-03-12 12:13 tag rel-1-0-0 | |
+ | |
+2003-03-12 12:13 nicolaw | |
+ | |
+ * commit.sh (1.2, rel-1-0-0): Minor change for my benefit again | |
+ | |
+2003-03-12 12:08 nicolaw | |
+ | |
+ * commit.sh (1.1): Adding commit.sh for my own ease of development | |
+ purposes | |
+ | |
+2003-03-07 15:12 nicolaw | |
+ | |
+ * install.sh (1.4), perldoc.css (1.1) (utags: rel-1-0-0): Added | |
+ .css for psmon.html docs properly | |
+ | |
+2003-03-07 14:55 nicolaw | |
+ | |
+ * psmon (1.46, rel-1-0-0): Updated documentation | |
+ | |
+2003-03-07 00:08 nicolaw | |
+ | |
+ * psmon (1.45): Smalled fixes in parts of POD documentation and | |
+ supporting versions | |
+ | |
+2003-03-06 18:01 nicolaw | |
+ | |
+ * psmon (1.44): Updated POD documentation. | |
+ | |
+2003-03-04 17:44 nicolaw | |
+ | |
+ * psmon (1.43): Added scalar to instances clause - might be broken | |
+ otherwise, maybe? | |
+ | |
+2003-03-04 16:32 nicolaw | |
+ | |
+ * psmon (1.41): Updated sendmail() I think | |
+ | |
+2003-03-03 14:12 nicolaw | |
+ | |
+ * psmon (1.40): Changed the syslog code so that the inital testing | |
+ and daemonizing uses syslog with PERROR so that erorrs get logged | |
+ to the connected terminal too. Once it's been daemonized or started | |
+ to do an actual process check, it reopens the syslog connection | |
+ without PERROR so that log entries only end up in syslog. | |
+ | |
+2003-02-28 17:53 nicolaw | |
+ | |
+ * psmon (1.39), psmon.conf (1.15, rel-1-0-0): LOG_CRIT or worse | |
+ errors no longer cause a die from log(). All orrurances of | |
+ LOG_CRIT logging which relied on this fucntionality have been | |
+ changed to manually force an exit with a unit exit return value. | |
+ | |
+2003-02-28 17:18 nicolaw | |
+ | |
+ * psmon (1.38): Added support to change the syslog facility logged | |
+ to, and set different loglevels for different kill and spawn | |
+ actions. | |
+ | |
+2003-02-27 16:28 nicolaw | |
+ | |
+ * psmon (1.37): Fixed some missing "unless $DAEMON" items | |
+ | |
+2003-02-27 16:13 nicolaw | |
+ | |
+ * psmon (1.36): Made changes to bring in to line with new features | |
+ of newapp_template. Includes double forking to detach from | |
+ interactive tty's properly. | |
+ | |
+2003-02-12 18:47 nicolaw | |
+ | |
+ * psmon (1.35): Serious fek up with pctmem and pctcpu values passed | |
+ in to sprintf was the problem - fixed | |
+ | |
+2003-02-12 18:44 nicolaw | |
+ | |
+ * psmon (1.34): Changes %.2f to %s for the moment - much | |
+ strangeness when tested on mdk | |
+ | |
+2003-02-12 18:40 nicolaw | |
+ | |
+ * psmon (1.33): Fixed some formatting and $slay hash reference | |
+ syntax errors | |
+ | |
+2003-02-12 18:27 nicolaw | |
+ | |
+ * psmon (1.32): I think I have fixed the safe PIDFile code which | |
+ protects named parent processes. The code was accidentally only | |
+ implemeneted for one slaying critera (oops). This needs to be | |
+ tested though. | |
+ | |
+ Also added support for additional description of why each process | |
+ was actually slayed,.. including some figures. | |
+ | |
+2003-02-12 15:49 nicolaw | |
+ | |
+ * psmon (1.31): Now uses $PIDFILE to support config file | |
+ indepentant PID files to allow many psmon instances using different | |
+ configs to run as daemons | |
+ | |
+2003-02-12 15:08 nicolaw | |
+ | |
+ * psmon (1.30): $PIDFILE is added - need to change the code to use | |
+ the variable | |
+ | |
+2003-02-11 15:58 nicolaw | |
+ | |
+ * psmon (1.29): Exporting POSIX stuff explicitly | |
+ | |
+2003-02-07 15:40 nicolaw | |
+ | |
+ * psmon (1.28): Fixed handling of process scope * so that it now | |
+ works properly | |
+ | |
+2003-02-07 14:49 nicolaw | |
+ | |
+ * psmon (1.27), psmon.conf (1.14): Added the DryRun directive to | |
+ force the dryrun mode to be applied to specific config files no | |
+ matter what. Added a little more documentation, and lots of | |
+ comments to the config file | |
+ | |
+2003-02-05 17:24 nicolaw | |
+ | |
+ * psmon (1.26): Fixed a =over4 pod tag to be =over 4 | |
+ | |
+2003-01-30 14:02 nicolaw | |
+ | |
+ * psmon (1.24): Added comment to what syslog facility in the log | |
+ docs | |
+ | |
+2003-01-30 13:59 nicolaw | |
+ | |
+ * install.sh (1.3), psmon (1.23): Updated docs, getting ahead of | |
+ myself with planned features/fixes/improvements. :) | |
+ | |
+2003-01-30 10:58 nicolaw | |
+ | |
+ * psmon (1.22), psmon.conf (1.13): Added email override | |
+ functionality | |
+ | |
+2003-01-28 10:47 nicolaw | |
+ | |
+ * psmon (1.21): Removed Sys::Load from dependencies since it's not | |
+ currently being used anywhere in the code! :-) | |
+ | |
+2003-01-28 10:47 nicolaw | |
+ | |
+ * install.sh (1.2): Removed Sys::Load from dependencies since it's | |
+ not currently being used anywhere in the code! :-) | |
+ | |
+2003-01-26 22:20 nicolaw | |
+ | |
+ * psmon (1.20): Yet more typos. | |
+ | |
+2003-01-26 22:19 nicolaw | |
+ | |
+ * psmon (1.19): Added a couple of lines of docs for the install | |
+ | |
+2003-01-26 22:12 nicolaw | |
+ | |
+ * psmon (1.18): Removed 2 debug lines which weren't taken out | |
+ | |
+2003-01-26 22:10 nicolaw | |
+ | |
+ * psmon (1.17): Added support for pctmem directive. Any process | |
+ using in excess of X percent of total system memory will be killed. | |
+ | |
+2003-01-26 22:03 nicolaw | |
+ | |
+ * psmon (1.16): Reformatted subroutine pod docs | |
+ | |
+2003-01-26 21:54 nicolaw | |
+ | |
+ * psmon.conf (1.12): Added lastsafepid functionality so save any | |
+ processes less than or equal to lastsafepid from death | |
+ | |
+2003-01-26 21:54 nicolaw | |
+ | |
+ * psmon (1.15): Added lastsafepid functionality so save any | |
+ processes less than or equal to lastsafepid from death | |
+ | |
+2003-01-26 21:17 nicolaw | |
+ | |
+ * psmon.conf (1.11): Expanded default psmon.conf, and added | |
+ LastSafePID option to protect all PIDs from 1 to X. Functionality | |
+ being added to psmon for this now. | |
+ | |
+2003-01-26 21:07 nicolaw | |
+ | |
+ * libnet-1.12.tar.gz (1.1, rel-1-0-4, rel-1-0-3, rel-1-0-2, | |
+ rel-1-0-1, rel-1-0-0): Added libnet for Net::SMTP module | |
+ dependancy. | |
+ | |
+2003-01-25 15:45 nicolaw | |
+ | |
+ * psmon.conf (1.9): Changed the default distribution psmon.conf a | |
+ little to be a little more sensible | |
+ | |
+2003-01-25 15:41 nicolaw | |
+ | |
+ * Config-General-2.15.tar.gz (1.1, rel-1-0-4, rel-1-0-3, rel-1-0-2, | |
+ rel-1-0-1, rel-1-0-0), Getopt-Long-2.32.tar.gz (1.1, rel-1-0-4, | |
+ rel-1-0-3, rel-1-0-2, rel-1-0-1, rel-1-0-0), | |
+ Proc-ProcessTable-0.38.tar.gz (1.1, rel-1-0-4, rel-1-0-3, | |
+ rel-1-0-2, rel-1-0-1, rel-1-0-0), Sys-Load-0.2.tar.gz (1.1, | |
+ rel-1-0-4, rel-1-0-3, rel-1-0-2, rel-1-0-1, rel-1-0-0), | |
+ Unix-Syslog-0.99.tar.gz (1.1, rel-1-0-4, rel-1-0-3, rel-1-0-2, | |
+ rel-1-0-1, rel-1-0-0), install.sh (1.1), psmon (1.14): Removed old | |
+ redundant ChangeLog file. Added shell script install.sh | |
+ installation wrapper, which will attempt to install any missing | |
+ perl modules, move old psmon versions out of the way and symlink | |
+ appropriately, install man pages etc etc | |
+ | |
+2003-01-24 18:31 nicolaw | |
+ | |
+ * psmon (1.13): Added the --dryrun command line option, so that | |
+ actual killing and spawning of processes can be disabled, but all | |
+ the other motions and alerts will happen. This is useful for | |
+ testing a new config file before using it in a live environment. | |
+ | |
+2003-01-24 18:21 nicolaw | |
+ | |
+ * psmon (1.12): Fixed =head2 pod syntax error | |
+ | |
+2003-01-24 18:18 nicolaw | |
+ | |
+ * psmon (1.11): Added some more docs | |
+ | |
+2003-01-24 18:06 nicolaw | |
+ | |
+ * psmon (1.10), psmon.conf (1.8): Added small docs for the pctcpu | |
+ config scope directive | |
+ | |
+2003-01-24 17:58 nicolaw | |
+ | |
+ * psmon (1.9), psmon.conf (1.7): Added more documentation | |
+ | |
+2003-01-24 17:45 nicolaw | |
+ | |
+ * psmon (1.8), psmon.conf (1.6): Fixed lots of variable references | |
+ to they they will now run with warnings enabled under Perl 5.8.x. | |
+ Also catches smtp failures and logs as such to syslog. | |
+ | |
+2003-01-24 16:57 nicolaw | |
+ | |
+ * psmon (1.7): Typo of $revision instead of $1 in display_version() | |
+ | |
+2003-01-24 16:56 nicolaw | |
+ | |
+ * psmon (1.6): Split sparse first line version information and then | |
+ detailed second line version information, plus author, copyright | |
+ and GPL license notice. | |
+ | |
+2003-01-24 16:47 nicolaw | |
+ | |
+ * psmon (1.5): Added --version command line option to print full | |
+ version information | |
+ | |
+2003-01-23 17:00 nicolaw | |
+ | |
+ * psmon (1.4): next part major update | |
+ | |
+2003-01-13 11:20 nicolaw | |
+ | |
+ * psmon.conf (1.2): changed notification email address | |
+ | |
+2003-01-06 12:23 nicolaw | |
+ | |
+ * psmon (1.2): Added POD documentation | |
+ | |
+2002-11-23 16:24 tag start | |
+ | |
+2002-11-23 16:24 nicolaw | |
+ | |
+ * psmon (1.1), psmon.conf (1.1): Initial revision | |
+ | |
+2002-11-23 16:24 nicolaw | |
+ | |
+ * psmon (1.1.1.1), psmon.conf (1.1.1.1) (utags: start): Imported | |
+ sources for module psmon | |
+ | |
diff --git a/psmon-1.0.4/Config-General-2.15.tar.gz b/psmon-1.0.4/Config-General-2.15.tar.gz | |
deleted file mode 100644 | |
index cc9b7e65108c37f9f6daebc40df39578231351b0..0000000000000000000000000000000000000000 | |
GIT binary patch | |
literal 0 | |
HcmV?d00001 | |
literal 32447 | |
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%0Dld2<+;?Q$#<YmqQ)+V=jMYh{C | |
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%0ALM7Y+ObxDUbO7<^X<xR?@(;Yf+e4$YRTuu | |
zTF<wZd7fL}Il863vn%YpNJZyb$!aRN`8l<mqZg}-)NuAU^oRZTuMS_rReOeEk?;@j | |
zJC{N|qqkZS@e19+v4Sa{KEYkPvx8L`7rb}#8y<g!>m!77ThsU}g*|qUR@YLx8H2Rw | |
zPqMLw61#eiS~N#59s|4w^9E>>!q07C{3zL3I$#IuYO=GIPqx;Ju=di~l(ML~1Z#?} | |
zr`QGA1;|3p6F{3K7k%}sf%ExKfxW3!-O|aDM-0u%a3fNoz$JtBOcC9)Dd3VwlIiF@ | |
z>&5PPO-HakJzr#T;EW#_jKSHG`YtxxvB{E`2a#Di@c7GJRr(9S3nO?R)KXYhyP=H| | |
zmtt}GilRNdh{T~&r68=sRfR~7`WlZpJORCB=;T+u^DIYAPS~L)Ka0r2BiDTKq~s}5 | |
ztT!55hv(a-V#N+j#caq#wnqzPU;+rd8MbyV7C@29fG<>jI$riVaH5^zm`IUn%un63 | |
z+FX>j`}-CQ#~cg|C9HlG^#{4~I9OhMzL49McA8!=$g4-#=ah4_^rH6;B6#|<!`5XY | |
z!mdRGend-fZL~Du1d(OYdgv!Y2BNI7Qau}obmk!oCEZneKHe26hEvSgO{*E#VE+!z | |
ztgk|W2{c;bHBYD*g=E%Rpt{l#Q`DSfg$OacNm?TTJGoAaRxff#TDMywl)*^ADyPUC | |
z9K76r^Zww)-s|{~*p8zeL6TT*8A*U!Ll|Dh3y`$j3D-%WrN|O21HgeHfpew<$Ua9q | |
zrGp6i!8J|#Fhq~*57R0OqOc{Vkm5pn*kCmqtrox%WpvAh9uub$dDen(omPd&7z5<x | |
zjvoe#Oq&%}Q(w$qV*s0d&5PX9>=C_QuZ1^_^QXzv$hZd)tANE~W^gIBEFhh5ww0V4 | |
zb0#Z24TOgx42MF2R8ylAvu#dE(?2_3I~^t$J>1e(C#s-qYp&*OEBzo<mB;x`cB;G* | |
zRbOFZ++JSq$e~~5lMmw5o7H;dg7-moT#96t>93__e+>)R%lyL~YjQBX4US!4pM=PY | |
z-x&FjY1AwdGUF-?{FQDS`Kk&-kZ7_(BrffcCov_?ap}Z~cEZc8X#{4J!FGk?J<5XJ | |
zBaZMV^f!auPa-u`jmK$Hcgdc;RRPjkWUqo-=k@^)Sof|ghZ~VdE}^ZBeym-e=!XJ_ | |
zEF}{#1c3%o+~{0ah*S&KbCi~n#}-)}9s~Ju<fxmlGMeSdLug06tPu6Uf}=(pPPOQ> | |
ze#WH<a649d@d2M6VW}GQAo`9}0mZRal9<<>8j2L~T7Ujd2E;|2oNhZF?W#cp>56}b | |
z;7$$^!+xTma*q7ob+h4|Pg%iMK=A~F(-^0i#xosWJ84dtC#|OC(Ldo$=1QJ#<8UN0 | |
zkbef+aW}fOl27c1PZ2x9xMA|uS?@~uALj4Vvoqw~<)l_IR8q)^q~|)#0WG%v6X+=} | |
ztChcL@n{TexQiRXF{oeDjtn61Rwf@r+*TcrXQZ7+>WrlAvU|?_8vg3#bt(Vp3;nT0 | |
z9J_{-j;@kX$pkdTQ{}De#rtRwa5>Bn(kYT&UEQ*g)_f^0R*`e#GDz5|+|y=2B666p | |
zM3NPLfYTH&sDLM{Pt0`iA$M+=qFTyhUOYC2t@%N@BzA&BIY{tAH_Q)1gJt8C67+$j | |
z4`li`c>ixea=RQPkdR4&r#^%UpW#bb-VGs0mFqKvO=rxU#msk23k4D`IvNL`AM!!k | |
z^c+4fUhnU{!!KM8wD$Ya`*(+L{xbXbAKx79zxeUpK27W4=4n>8Y+M3-MVVSrm)j2x | |
z7A1gSOM8&<ZV(@Aw{X&}9X`6qs@_8p3dCVtLJLbh&|D=yhfYjcrK!R^(5Oj1o}ji! | |
z0f4OsI0hv}5!NZAGg^vyvm@C>*|Fc;%A=Y%;Y@`r_61^+he6>|uv{0fmARBiWJPBE | |
zXu;37NiW90=q?}MDJ(tWywDND6MIu4&W$vOy5QUfHd#lIOQStmUX&cxqI_gfqALI@ | |
zJL-s}_U-CO1IvXD9pSFV$r)Z0aa6=T_FBw#2w`&ocQNpt38XXIT7aj8&S)6~-yn=z | |
z-HwPCrB<J9V;nO6)j}2$w>+J+8dzJ=uTCPWj?L_B2N4*apOf8cC&g$vcM3K*m$$<d | |
z*@V;dDw(9hT9V`>fh3s<GEAHmz3UOPHi0uD0+zq-`kct4Ty-A<j)0nGsG&;BtCalJ | |
zO-a~6c19EhQ%(S%Um)KZuxSkV0wp9T)BH?Oy^T)B1kBhnVu_j+JOoiNAz1TYg>n<v | |
zQ%TLd42e$aXpSd+N;90wI-t0SODsc3E}z9X=X_ueYc-3YoctND$vz{#MuhVG_1-JM | |
zCj`n-#Czdc0Y@qQt-@aZrFUlDJ@_3rriCkSRd)-7nIV7-ad@5w3QBe;BP4{m%G|J0 | |
zOuYfv4WO;AfkuNU2$xujLh@>nir#ZHWfOYy+Pq4f2Fhm)e1UoaJ5piG+*cF9B^@gt | |
zJ;>OtxF_rMB%z{cTS5O<O@*>zt%`{c$sDJXAvI{8UBc`tsS5C-JD5hZJZa%%U@Rxn | |
zi%BtzFxtgML`u<F?TNyHvXj6n0h)N9rCVDse||*|czBI>My)Y0){+DtB{r>5ZLU&V | |
zrrfX`KnCcBImki2KLq@GtuvF!L;@G3-0~!T`TPf|7L*4imy4j5wRjyeahouwa*2s( | |
zMS4W;jT+@N*DPHfCZhr8nRvYofA46rJ`$42y&xq_839sD0@YU~m}ZWkWl)WV)u0ey | |
z4+rIY!!}2hlo6fqab6YXGOT&F<8=kuh^<#*r*Sh4%f!r?=(VvNh#3Rm2yQfNayyk? | |
zI?gx&l3>F1<jrB|{hTp%oy!8#4vMD3te=|->l#|1ky{F&f)J{@5K@GoHJsI4qbQwB | |
zaw-!^H;ID=WGzXp_`0OUB$g^4uObO;2ir=!nvU>{2LRCr(k&XyYwJL{Gj5+!^+MJ| | |
z<RBiSFgeOw9j#Ol*^shIEuuBN8f%OkMLm|ON)b2p@bK-btmRwG)3*2H`@`3VdoPI~ | |
zo{70f&k(xA*amWl>=66S8HGB%s(zmf&Hqv7kTeyi=Vs5ht5?mBCsJpGnk)l)1ltE9 | |
z@QWIAowzZMtRoXBk9`UIl$@s_<oV>CJKmlKa0)v^+I~j3@kL&f{4i|}pbBMWkWesA | |
zr~K1qnqsLfoFri+>5=<^rJvYrIVzSg&wWJJ^Hac1gt9QXr&Xo7yL_4bY|@hYG_ZvZ | |
zD5+i}^AqgFtNaT6q_DWaWtqVyQHLmJT_Mj{<}P-h?l9*LmArw3JK5zPRbP=;ed(kS | |
z`&9OsJqnzy#Veh*H2JE?ld?0iAKjoZYY2TITfm-`aPdrf+sIT*4c}$`9lzrihoPY^ | |
zA1)cOwDzc|_|gbq6d6&sTGHYW(`(o4yby`r$bOv@Kau{7L>2?3BIgKkk!O8?g6}b~ | |
z&~u}eu8@brimqE&(KU(!l}qD3^z$K7A#$Ddd!mqAOyPRKl`JCOZ5_qeQNhfr123-t | |
z$1XWD!xxC@xk6o|^UYTV!3Gqu@4ojJ@@58DK1ezv#LvKWz>n$+A!&?ifCTv0K7qTW | |
z8YYD#JUIh4-S}a+1D0PSRT?dZLmMLXguroJ?b(d1zoJydgCC{*t{!{fe7aM^HvT8l | |
zP%~yF6)<3i35dOuWOCgABu%E=Gnc8Ey-XrH@{(%JRW{3M8LPE)^@5jbeF-UZu$ZdL | |
z0jD?+k&GY?aN-$qnB2Po4)_({G2kKEdR{yuNdygo3T9zRO=7n<E0vO~Qj^?LqZz?w | |
zF4|8OG1Wb(>;<g+dCJj;7&mk_g{>A5!mczRn6ApzPThx%iZk+EggXN_JMLFKZ^#l< | |
zpuQYV_{HH5KkUDGe*`4?`LwKJSjIBh`32QJ=54{a$k67Xh!+Vb<Kwe5AvF)OBZeCZ | |
z<}PR8wft=i{UojV3cR<1OoAaz;k%YCK;Xe6h`i}d{br-+UEnlkHBbcFla!<mstj83 | |
z4e(oTFi8~sjXkf;@v|q6zyRwKCIgZbVypY{YI)?6uJXuxw=j9)j2?Aw%2LwglV8Ub | |
zi5`CRsJPJBDD(+0ss1_lS96zjCW2&0N)u-Uh#K5A{Z@4qp7}aB7Ictv1$vh7=-jJA | |
zMlL0vb7D7}ru-b4SS5K6h0!v%?~Fdtw5ZYo)m#Ar3sRssAg?M9016#Ya7m9TGC1)t | |
zM-obkM+RdI%k`%w9!~`ML}+1u&}PoVTN7;EzkmzT7o}?wwVn5q%N!(bS1F6HRE!hX | |
z@i9xUfZ5+0S(>~}I>U<u?V@oU1FO055T35#<DE!JS|6`(=s(2kV-)B*qCU1=Z@xo# | |
zx+afZ-$qYGmWdN!?X7EcYm{E8@gY9ec(kYJSk(=U>a$Oqd3AuxK{lW`N{Y{3WJnyy | |
z-c=>@q4E{&4F8;FfNRo`H3>=a7k|lFVU81#tlW{$F@8>Xw)8QWj*=i!WHn0=f?<O+ | |
zRng)&RU{DC<OMf8<5R*=esa$&Ey9pnJI{_c_X_tSxwAQP8X;-ve)j#0EMpKVGsS{c | |
zO3}E=`N{c&aI)}geA<HX#a;Bp;hXOd{t|zG@OnS~{_x!od+(#@HAOv9RSQ;Ek+`?C | |
zQ!UL^Q_D6}$ork>h&ednLS4^{Pg2dv$>Nx)L}$=YQn23*>gkeGV7CCU3U@k$W{O}C | |
z>T}}9^R*$_T4b~;Q33)^ImyQtXpe3I8@Q(?c$yGp$rWcDlJAJ1FqY7oP9hQ_-f?1` | |
zAsfBu2(gP3qy#yUL5z?Sd@hrp^^a%v5C6f3;*6%1ol}x1+7d+Dw)?hi+qP}nwr$(C | |
zZQHhO+wV-_eeMD5sK~69S(eO4eg@xhk)h01y}O1ZU&K%?*@XlAGKe=t=R_-UE`ab( | |
zmk^_fS1sVJXLay;-(Lx4(jyqLa9x>X_tPEBV_v@un_craXtyXDJ<Rdy%2^PYu(n5s | |
z8F23<Fthf4Uh22vd&vk6eqY@v=b{UfY?@Uql?iClsSz%{8ED%0D#cG(a7><rW)O0Y | |
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 | |
K8~_9m!2bYNvMulc | |
diff --git a/psmon-1.0.4/Getopt-Long-2.32.tar.gz b/psmon-1.0.4/Getopt-Long-2.32.tar.gz | |
deleted file mode 100644 | |
index 1562f8c4318bc6ebceac41fa1a2695a93ff2009a..0000000000000000000000000000000000000000 | |
GIT binary patch | |
literal 0 | |
HcmV?d00001 | |
literal 29823 | |
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 | |
diff --git a/psmon-1.29/INSTALL b/psmon-1.29/INSTALL | |
new file mode 100644 | |
index 0000000..b7bd362 | |
--- /dev/null | |
+++ b/psmon-1.29/INSTALL | |
@@ -0,0 +1,18 @@ | |
+$ tar -zxvf psmon-1.nn.tar.gz | |
+$ cd psmon-1.nn | |
+$ su | |
+Password: | |
+$ support/install.sh | |
+$ vi /etc/psmon.conf | |
+ | |
+-or- | |
+ | |
+$ tar -zxvf psmon-1.nn.tar.gz | |
+$ cd psmon-1.nn | |
+$ perl Makefile.PL | |
+$ make | |
+$ su | |
+Password: | |
+$ make install | |
+$ vi /etc/psmon.conf | |
+ | |
diff --git a/psmon-1.29/MANIFEST b/psmon-1.29/MANIFEST | |
new file mode 100644 | |
index 0000000..4c3144f | |
--- /dev/null | |
+++ b/psmon-1.29/MANIFEST | |
@@ -0,0 +1,15 @@ | |
+author.jpg | |
+COPYING | |
+Changes | |
+Makefile.PL | |
+bin/psmon | |
+bin/psmon-config | |
+etc/psmon.conf | |
+README | |
+INSTALL | |
+MANIFEST | |
+support/perldoc.css | |
+support/install.sh | |
+support/psmon.html | |
+TODO | |
+META.yml | |
diff --git a/psmon-1.29/META.yml b/psmon-1.29/META.yml | |
new file mode 100644 | |
index 0000000..3cea2ce | |
--- /dev/null | |
+++ b/psmon-1.29/META.yml | |
@@ -0,0 +1,16 @@ | |
+# http://module-build.sourceforge.net/META-spec.html | |
+#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# | |
+name: psmon | |
+version: 1.29 | |
+version_from: bin/psmon | |
+installdirs: site | |
+requires: | |
+ Config::General: 0 | |
+ Getopt::Long: 0 | |
+ Net::SMTP: 0 | |
+ POSIX: 0 | |
+ Proc::ProcessTable: 0 | |
+ Unix::Syslog: 0 | |
+ | |
+distribution_type: module | |
+generated_by: ExtUtils::MakeMaker version 6.25 | |
diff --git a/psmon-1.29/Makefile.PL b/psmon-1.29/Makefile.PL | |
new file mode 100644 | |
index 0000000..653bfa1 | |
--- /dev/null | |
+++ b/psmon-1.29/Makefile.PL | |
@@ -0,0 +1,59 @@ | |
+############################################################ | |
+# $Id: Makefile.PL,v 1.8 2005/03/02 11:48:42 nicolaw Exp $ | |
+# psmon - Process Table Monitor Script | |
+# Copyright: (c)2002,2003,2004 Nicola Worthington. All rights reserved. | |
+############################################################ | |
+# This file is part of psmon. | |
+# | |
+# psmon is free software; you can redistribute it and/or modify | |
+# it under the terms of the GNU General Public License as published by | |
+# the Free Software Foundation; either version 2 of the License, or | |
+# (at your option) any later version. | |
+# | |
+# psmon is distributed in the hope that it will be useful, | |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
+# GNU General Public License for more details. | |
+# | |
+# You should have received a copy of the GNU General Public License | |
+# along with psmon; if not, write to the Free Software | |
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
+############################################################ | |
+ | |
+require 5.005; | |
+use strict; | |
+use ExtUtils::MakeMaker qw(WriteMakefile); | |
+ | |
+WriteMakefile( | |
+ NAME => 'psmon', | |
+ VERSION_FROM => 'bin/psmon', | |
+ AUTHOR => 'Nicola Worthington <nicolaworthington@msn.com>', | |
+ ABSTRACT_FROM => 'bin/psmon', | |
+ EXE_FILES => [ ('bin/psmon','bin/psmon-config') ], | |
+ | |
+ dist => { | |
+ 'COMPRESS' => 'gzip -9f', | |
+ 'SUFFIX' => 'gz', | |
+ 'ZIP' => '/usr/bin/zip', | |
+ 'ZIPFLAGS' => '-rl', | |
+ }, | |
+ | |
+ PREREQ_PM => { | |
+ 'Getopt::Long' => 0, | |
+ 'Config::General' => 0, | |
+ 'POSIX' => 0, | |
+ 'Proc::ProcessTable' => 0, | |
+ 'Net::SMTP' => 0, | |
+ 'Unix::Syslog' => 0, | |
+ }, | |
+); | |
+ | |
+#sub MY::postamble { | |
+# my $postamble = <<END; | |
+#psmon-config: | |
+# \$(INST_SCRIPT)/psmon-config | |
+#END | |
+# return $postamble; | |
+#} | |
+ | |
+ | |
diff --git a/psmon-1.0.4/Proc-ProcessTable-0.38.tar.gz b/psmon-1.0.4/Proc-ProcessTable-0.38.tar.gz | |
deleted file mode 100644 | |
index 2532192f138d7401f3ba9171ffbc09a8e7672d76..0000000000000000000000000000000000000000 | |
GIT binary patch | |
literal 0 | |
HcmV?d00001 | |
literal 48137 | |
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®?A!#tSg=;_O2^r7Hx*M#n_c!Vv; | |
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 | |
F0|2o~Rf_-s | |
diff --git a/psmon-1.0.4/README b/psmon-1.29/README | |
index d5e2892..d1edece 100644 | |
--- a/psmon-1.0.4/README | |
+++ b/psmon-1.29/README | |
@@ -1,123 +1,20 @@ | |
-This file was automatically generated from http://psmon.perlguy.org.uk/index.htm | |
-at Thu Mar 20 16:20:50 GMT 2003 | |
--------------------------------------------------------------------------------- | |
- | |
- | |
- PSMON - Process Monitoring Daemon | |
- | |
- psmon is a Perl script which can be run as a stand alone program or a | |
- fully functional background daemon, capable of logging to syslog with | |
- customisable email notification facilities. | |
- | |
- The user defines a set of rules in an Apache-style plain text | |
- configuration file. These rules describe what processes should always be | |
- running on the system, and any limitations on concurrent instances, TTL | |
- and maximum CPU/memory usage of processes. psmon scans the UNIX process | |
- table and, using the set of rules defined in the configuration file, will | |
- respawn any dead processes, and/or slay or "deal with" any aggressive or | |
- illegal processes. | |
- | |
- Originally written and designed for use by a UK ISP, it is designed to be | |
- as flexible as posible, for use on a per-user, or system-wide server | |
- basis. | |
- | |
- For further detailed information on what psmon can do for you, how | |
- flexible it is and a list of all its features, please read the | |
- documentation. Please feel free to email me at nicl@perlguy.org.uk with | |
- any questions, suggestions or bug reports you may have. | |
- | |
-Platforms | |
- | |
- psmon is known to work fine on the following Linux distributions: | |
- | |
- * Red Hat Linux 6.0, 6.1, 6.2, 7.0, 7.1, 7.2, 7.3, 8.0 | |
- * Mandrake Linux 8.1, 9.0, 9.1 beta | |
- * Debian Woody, Potato, Sid | |
- * SuSE Linux 7.2, 7.3 | |
- * Caldera OpenLinux 2.4 | |
- | |
- Please let me know if you have tested it on any other platforms. Since it | |
- is written in Perl, using commonly available CPAN modules, it should be | |
- portable to most *NIX platforms without modification. Unfortunately I have | |
- not had the oppertunity to put this to the test, (yet). | |
- | |
-Downloads | |
- | |
- If you use the --user function of psmon, you must upgrade to version 1.0.2 | |
- or better. Earlier versions have a gaping bug whereby the either all or no | |
- processes in the process table are identified as being owned by the | |
- specified user. | |
- | |
- Recent stable releases: | |
- | |
- * Current stable release (http://psmon.perlguy.org.uk/cvs/psmon.tgz) | |
- * psmon 1.0.2 released 2003/Mar/19 | |
- (http://psmon.perlguy.org.uk/cvs/psmon-1.0.2.tgz 223k) | |
- * psmon 1.0.1 released 2003/Mar/17 | |
- (http://psmon.perlguy.org.uk/cvs/psmon-1.0.1.tgz 221k) | |
- * psmon 1.0.0 released 2003/Mar/12 | |
- (http://psmon.perlguy.org.uk/cvs/psmon-1.0.0.tgz 212k) | |
- | |
- Development CVS revisions: | |
- | |
- * View the development CVS repository at | |
- http://cvs.perlguy.org.uk/index.cgi/psmon/. | |
- * Download latest CVS revision in .tar.gz format from | |
- http://perlguy.org.uk/perl_guy/software/cvstarballs/psmon-cvs.tar.gz. | |
- * Download latest CVS revision in .tar.bz2 format from | |
- http://perlguy.org.uk/perl_guy/software/cvstarballs/psmon-cvs.tar.bz2. | |
- * Download latest CVS revision in .zip format from | |
- http://perlguy.org.uk/perl_guy/software/cvstarballs/psmon-cvs.zip. | |
- | |
-Requirements | |
- | |
- psmon is written in Perl, and has been confirmed to work with Perl | |
- versions 5.005_03, 5.60, 5.61 and 5.80. The following CPAN modules are | |
- also required: | |
- | |
- * POSIX (part of the standard Perl distribution) | |
- * Getopt::Long (part of the standard Perl distribution) | |
- * Net::SMTP (download) | |
- * Proc::ProcessTable (download) | |
- * Config::General (download) | |
- * Unix::Syslog (download) | |
- | |
- These Perl modules are included in the psmon tarball. The install.sh | |
- installation script will attempt to install any of these modules if are | |
- not already installed, with the exception of POSIX, Getopt::Long, and | |
- Net::SMTP. (The first two will always be present, and the latter can be | |
- installed manually from the libnet tar.gz file provided). See the CPAN FAQ | |
- at http://www.cpan.org/misc/cpan-faq.html and psmon documentation for | |
- further information. | |
- | |
-Documentation | |
- | |
- o View the current HTML documentation at | |
- http://psmon.perlguy.org.uk/psmon.html. | |
- o Download the current man page documentation from | |
- http://psmon.perlguy.org.uk/psmon.1. | |
- o View the ChangeLog at http://psmon.perlguy.org.uk/ChangeLog. | |
- o View the default distribution configuration file at | |
- http://psmon.perlguy.org.uk/psmon.conf. | |
- | |
-Other | |
- | |
- Mailing List | |
- The psmon-general list is a low traffic list for general discussion and | |
- accouncements relating to psmon. | |
- * Subscribe to the psmon-general mailing list at | |
- http://lists.sourceforge.net/lists/listinfo/psmon-general. | |
- * Search the psmon-general mailing list archive at | |
- http://sourceforge.net/mailarchive/forum.php?forum=psmon-general. | |
- | |
- o View the TODO list at http://psmon.perlguy.org.uk/psmon.html#todo. | |
- o This project is licensed under the terms of the GNU General Public | |
- License. | |
- o Visit the psmon Freshmeat project page at | |
- http://freshmeat.net/projects/psmon/. | |
- o Visit the psmon Savannah project page at | |
- http://savannah.gnu.org/projects/psmon/. | |
- o Visit the psmon SourceForge project page at | |
- http://sourceforge.net/projects/psmon/. | |
- o Please email the author Nic Lawrence at nicl@perlguy.org.uk for help, | |
- suggestions, bug reports etc. | |
+psmon is a Perl script which can be run as a stand alone program or a | |
+fully functional background daemon, capable of logging to syslog with | |
+customisable email notification facilities. | |
+ | |
+The user defines a set of rules in an Apache-style plain text | |
+configuration file. These rules describe what processes should always be | |
+running on the system, and any limitations on concurrent instances, TTL | |
+and maximum CPU/memory usage of processes. psmon scans the UNIX process | |
+table and, using the set of rules defined in the configuration file, will | |
+respawn any dead processes, and/or slay or "deal with" any aggressive or | |
+illegal processes. | |
+ | |
+Originally written and designed for use by a UK ISP, it is designed to be | |
+as flexible as posible, for use on a per-user, or system-wide server | |
+basis. | |
+ | |
+For further detailed information on what psmon can do for you, how | |
+flexible it is and a list of all its features, please read the | |
+documentation. Please feel free to email me at nicolaworthington@msn.com | |
+with any questions, suggestions or bug reports you may have. | |
diff --git a/psmon-1.0.4/Sys-Load-0.2.tar.gz b/psmon-1.0.4/Sys-Load-0.2.tar.gz | |
deleted file mode 100644 | |
index 7e94e6b78a88f23f18fef03fae0d4ec6a10e7e1b..0000000000000000000000000000000000000000 | |
GIT binary patch | |
literal 0 | |
HcmV?d00001 | |
literal 1794 | |
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 | |
diff --git a/psmon-1.29/TODO b/psmon-1.29/TODO | |
new file mode 100644 | |
index 0000000..8c66e46 | |
--- /dev/null | |
+++ b/psmon-1.29/TODO | |
@@ -0,0 +1,18 @@ | |
+The following functionality will be added soon: | |
+ | |
+Code cleanup | |
+ The code needs to be cleaned up and made more efficient. | |
+ | |
+killperprocessname directive | |
+ Will accept a boolean value. If true, only 1 process per process scope will ever be | |
+ killed, instead of all process IDs matching kill rules. This should be used in conjunc- | |
+ tion with the new killcmd directive. For example, you may define that a database daemon | |
+ may never take up more than 90% CPU time, and it runs many children processes. If it | |
+ exceeds 90% CPU time, you want to issue ONE restart command in order to stop and then | |
+ start all the database processes in one go. | |
+ | |
+time period limited rules | |
+ Functionality to limit validity of process scopes to only be checked between defined time | |
+ periods. For example, only check that httpd is running between the hours of 8am and 5pm on | |
+ Mondays and Tuesdays. | |
+ | |
diff --git a/psmon-1.0.4/Unix-Syslog-0.99.tar.gz b/psmon-1.0.4/Unix-Syslog-0.99.tar.gz | |
deleted file mode 100644 | |
index 1fcb88631fec07e86cac26a625a617084c09cccc..0000000000000000000000000000000000000000 | |
GIT binary patch | |
literal 0 | |
HcmV?d00001 | |
literal 12499 | |
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 | |
diff --git a/psmon-1.29/author.jpg b/psmon-1.29/author.jpg | |
new file mode 100644 | |
index 0000000000000000000000000000000000000000..64820f2352a8ba25110bd5e62c54f6b4b441810e | |
GIT binary patch | |
literal 13675 | |
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 | |
JA3|^D{twRzHdz1w | |
literal 0 | |
HcmV?d00001 | |
diff --git a/psmon-1.29/bin/psmon b/psmon-1.29/bin/psmon | |
new file mode 100755 | |
index 0000000..eab3192 | |
--- /dev/null | |
+++ b/psmon-1.29/bin/psmon | |
@@ -0,0 +1,1716 @@ | |
+#!/usr/bin/perl -w | |
+ | |
+############################################################ | |
+# $Id: psmon,v 1.29 2005/05/06 16:10:23 nicolaw Exp $ | |
+# psmon - Process Table Monitor Script | |
+# Copyright: (c)2002,2003,2004,2005 Nicola Worthington. All rights reserved. | |
+############################################################ | |
+# This file is part of psmon. | |
+# | |
+# psmon is free software; you can redistribute it and/or modify | |
+# it under the terms of the GNU General Public License as published by | |
+# the Free Software Foundation; either version 2 of the License, or | |
+# (at your option) any later version. | |
+# | |
+# psmon is distributed in the hope that it will be useful, | |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
+# GNU General Public License for more details. | |
+# | |
+# You should have received a copy of the GNU General Public License | |
+# along with psmon; if not, write to the Free Software | |
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
+############################################################ | |
+ | |
+=pod | |
+ | |
+=head1 NAME | |
+ | |
+psmon - Process Table Monitoring Script | |
+ | |
+=head1 VERSION | |
+ | |
+$Id: psmon,v 1.29 2005/05/06 16:10:23 nicolaw Exp $ | |
+ | |
+=head1 SYNOPSIS | |
+ | |
+ Syntax: psmon [--help] [--version] [--dryrun] [--daemon] [--cron] | |
+ [--conf=filename] [--user=user] [--nouser] | |
+ [--adminemail=emailaddress] [--verbose] | |
+ | |
+ --help Display this help | |
+ --version Display full version information | |
+ --dryrun Dry run (do not actually kill or spawn any processes) | |
+ --daemon Spawn in to background daemon | |
+ --cron Disables 'already running' errors with the --daemon option | |
+ --conf=str Specify alternative config filename | |
+ --user=str Only scan the process table for processes running as str | |
+ --nouser Force scanning for all users when not run as superuser | |
+ --adminemail=str Force all notification emails to be sent to str | |
+ --verbose Output more verbose information | |
+ | |
+=head2 crontab | |
+ | |
+Single user account crontab operation: | |
+ | |
+ MAILTO="nicolaw@cpan.org" | |
+ HOME=/home/nicolaw | |
+ USER=nicolaw | |
+ */5 * * * * psmon --daemon --cron --conf=$HOME/etc/psmon.conf --user=$USER --adminemail=$MAILTO | |
+ | |
+Regular system-wide call from cron every 10 minutes to ensure that psmon is still running as a daemon: | |
+ | |
+ 0,10,20,30,40,50 * * * * psmon --daemon --cron | |
+ | |
+Only check processes during working office hours: | |
+ | |
+ * 9-17 * * * psmon | |
+ | |
+=head1 DESCRIPTION | |
+ | |
+This script monitors the process table using Proc::ProcessTable, and | |
+will respawn or kill processes based on a set of rules defined in an | |
+Apache style configuration file. | |
+ | |
+Processes will be respawned if a spawn command is defined for a process, | |
+and no occurrences of that process are running. If the --user command line | |
+option is specified, then the process will only be spawned if no instances | |
+are running as the specified userid. | |
+ | |
+Processes can be killed off if they have been running for too long, | |
+use too much CPU or memory resources, or have too many concurrent | |
+versions running. Exceptions can be made to kill rulesets using the | |
+I<PIDFile> and I<LastSafePID> directives. | |
+ | |
+If a PID file is declared for a process, psmon will never kill the | |
+process ID that is contained within the pid file. This is useful if for | |
+example, you have a script which spawns hundreds of child processes | |
+which you may need to automatically kill, but you do not want to kill | |
+the parent process. | |
+ | |
+Any actions performed will be logged to the DAEMON syslog facility by default. | |
+There is support to optionally also send notifications emails to an | |
+administrator on a global or pre-rule basis. | |
+ | |
+=head1 OPERATION | |
+ | |
+=over 4 | |
+ | |
+=item --help | |
+ | |
+Display this help. | |
+ | |
+=item --version | |
+ | |
+Display full version information. | |
+ | |
+=item --dryrun | |
+ | |
+Execute a dry-run (do not actually kill or spawn and processes). | |
+ | |
+=item --daemon | |
+ | |
+Spawn in to background daemon. | |
+ | |
+=item --cron | |
+ | |
+Disables already running warnings when trying to launch as another daemon. | |
+ | |
+=item --conf=I<filename> | |
+ | |
+Specify alternative config filename. The configuration file defaults | |
+to /etc/psmon.conf when running as superuser, or ~/etc/psmon.conf when | |
+running as a non-superuser. | |
+ | |
+=item --user=I<user> | |
+ | |
+Only scan the process table for processes running under this username. | |
+ | |
+=item --nouser | |
+ | |
+Force scanning for all users when not run as superuser. By default psmon | |
+will only scan processes belonging to the current user for non-superusers. | |
+ | |
+=item --adminemail=I<emailaddress> | |
+ | |
+Force all notification emails to be sent to this email address. This | |
+option will override all I<AdminEmail> directives within the configuration | |
+file. | |
+ | |
+=item --verbose | |
+ | |
+Output more verbose information. | |
+ | |
+=back | |
+ | |
+=head1 INSTALLATION | |
+ | |
+In addition to Perl 5.005_03 or higher, the following Perl modules are | |
+required: | |
+ | |
+ Proc::ProcessTable | |
+ Config::General | |
+ Getopt::Long | |
+ POSIX | |
+ IO::File | |
+ File::Basename | |
+ | |
+These two additional modules are not required, but will provide enhanced | |
+functionality if present. | |
+ | |
+ Net::SMTP | |
+ Unix::Syslog | |
+ | |
+The POSIX module is usually supplied with Perl as standard, as is | |
+IO::File and File::Basename. All these modules can be | |
+obtained from CPAN. Visit http://search.span.org and http://www.cpan.org | |
+for further details. For the lazy people reading this, you can try the | |
+following command to install these modules: | |
+ | |
+ for m in Config::General Proc::ProcessTable Net::SMTP \ | |
+ Unix::Syslog Getopt::Long; do perl -MCPAN -e"install $m";done | |
+ | |
+Alternatively you can run the install.sh script which comes in the | |
+distribution tarball. It will attempt to install the right modules, | |
+install the script and configuration file, and generate UNIX man page | |
+documentation. | |
+ | |
+By default psmon will look for its runtime configuration in /etc/psmon.conf, | |
+although this can be defined as otherwise from the command line. For system | |
+wide installations it is recommended that you install your psmon in to the | |
+default location. | |
+ | |
+=cut | |
+ | |
+ | |
+ | |
+package PSMon; | |
+ | |
+use strict; | |
+use Getopt::Long (); | |
+use Config::General (); | |
+use POSIX (); | |
+use IO::File (); | |
+use Proc::ProcessTable (); | |
+use File::Basename (); | |
+ | |
+# Define constants | |
+use constant DEBUG => $ENV{'PSMon_DEBUG'} ? 1 : 0; | |
+use constant PREFIX => ''; # You may want to set this to /home/joeb or something | |
+ | |
+# Declare global package variables | |
+use vars qw($VERSION $SELF %OPT %C); # I want to move %OPT, and %C out of global space | |
+ | |
+$| = 1; # Autoflush output | |
+($SELF = $0) =~ s|^.*/||; | |
+$VERSION = sprintf('%d.%02d', q$Revision: 1.29 $ =~ /(\d+)/g); | |
+ | |
+# Get command line options | |
+%OPT = ( default_conf => PREFIX.'/etc/psmon.conf' ); | |
+Getopt::Long::GetOptions(\%OPT, qw(help version verbose daemon cron dryrun | |
+ conf=s config=s user=s nouser adminemail=s)); | |
+ | |
+# Display help or version info and exit if required | |
+display_help(0) if exists $OPT{help}; | |
+display_version(0) if exists $OPT{version}; | |
+ | |
+# Open syslog with PERROR (output to terminal) | |
+my $msg = PSMon::Logging->new(options => \%OPT, config => \%C, SELF => $SELF); | |
+ | |
+# Check the user we should be running as | |
+parse_user_to_run_as(); | |
+$OPT{conf} ||= $OPT{config}; | |
+$OPT{conf} = get_config_to_read_from($OPT{conf}); | |
+ | |
+ | |
+ | |
+=pod | |
+ | |
+=head1 CONFIGURATION | |
+ | |
+The default configuration file location is /etc/psmon.conf. A different | |
+configuration file can be declared from the command line. You will find | |
+an example configuration file supplied in the etc/ directory of the | |
+distribution tarball. It is recommended that you use this as a guide to | |
+writing your own configuration file by hand. Alternatively you can use | |
+the B<psmon-config> script which will interactively create a configuration | |
+for you. | |
+ | |
+Syntax of the configuration file is based upon that which is used by | |
+Apache. Each process to be monitored is declared with a Process scope | |
+directive like this example which monitors the OpenSSH daemon: | |
+ | |
+ <Process sshd> | |
+ spawncmd /sbin/service sshd start | |
+ pidfile /var/run/sshd.pid | |
+ instances 50 | |
+ pctcpu 90 | |
+ </Process> | |
+ | |
+There is a special I<*> process scope which applies to I<all> running | |
+processes. This special scope should be used with extreme care. It does | |
+not support the use of the I<SpawnCMD>, I<PIDFile>, I<Instances> or I<TTL> | |
+directives. A typical example of this scope might be as follows: | |
+ | |
+ <Process *> | |
+ pctcpu 95 | |
+ pctmem 80 | |
+ </Process> | |
+ | |
+Global directives which are not specific to any one process should be placed | |
+outside of any Process scopes. | |
+ | |
+=head2 DIRECTIVES | |
+ | |
+Configuration directives are not case sensitive, but the values that they | |
+define are. | |
+ | |
+=over 4 | |
+ | |
+=item AdminEmail | |
+ | |
+Defines the email address where notification emails should be sent to. | |
+May be also be used in a process scope which will take priority over a | |
+global declaration. Defaults to root@localhost. | |
+ | |
+=item DefaultEmailMethod | |
+ | |
+Defines which method should be used by default to try and send notification | |
+emails. Legal values are 'SMTP' or 'sendmail'. Defaults to 'sendmail'. | |
+ | |
+=item Dryrun | |
+ | |
+Forces psmon to act in the same way as if the --dryrun command line switch | |
+had specified. This is useful if you want to force a specific configuration | |
+file to only report and never actually take any automated action. | |
+ | |
+=item Facility | |
+ | |
+Defines which syslog facility to log to. Valid options are as follows; | |
+LOG_KERN, LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_SYSLOG, LOG_LPR, | |
+LOG_NEWS, LOG_UUCP, LOG_CRON, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, | |
+LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6 and LOG_LOCAL7. This | |
+functionality requires the Unix::Syslog module. Defaults to LOG_DAEMON. | |
+ | |
+=item Frequency | |
+ | |
+Defines the frequency of process table queries. Defaults to 60 seconds. | |
+ | |
+=item KillLogLevel (previously KillPIDLogLevel) | |
+ | |
+The same as the loglevel directive, but only applies to process kill actions. | |
+Takes priority over the loglevel directive. May be also be used in a | |
+Process scope which will take priority over a global declaration. | |
+Undefined by default. | |
+ | |
+=item LastSafePID | |
+ | |
+When defined, psmon will never attempt to kill a process ID which is | |
+numerically less than or equal to the value defined by lastsafepid. It | |
+should be noted that psmon will never attempt to kill itself, or a process ID | |
+less than or equal to 1. Defaults to 100. | |
+ | |
+=item LogLevel | |
+ | |
+Defines the loglevel priority that notifications to syslog will be | |
+marked as. Valid options are as follows; LOG_EMERG, LOG_ALERT, LOG_CRIT, | |
+LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO and LOG_DEBUG. The log level | |
+used by a notification for any failed action will automatically be | |
+raised to the next level in order to highlight the failure. May be also be used | |
+in a Process scope which will take priority over a global declaration. This | |
+functionality requires the Unix::Syslog module. Defaults to LOG_NOTICE. | |
+ | |
+=item NeverKillPID | |
+ | |
+Accepts a space delimited list of PIDs which will never be killed. | |
+Defaults to 1. | |
+ | |
+=item NeverKillProcessName | |
+ | |
+Accepts a space delimited list of process names which will never be | |
+killed. Defaults to 'devfsadmd kswapd kupdated mdrecoveryd pageout sched init fsflush'. | |
+ | |
+=item NotifyEmailFrom | |
+ | |
+Defines the email address that notification email should be addresses | |
+from. Defaults to <username>@I<hostname>. | |
+ | |
+=item SendmailCmd | |
+ | |
+Defines the sendmail command to use to send notification emails if there | |
+is a failure with the SMTP connection to the host defined by I<SMTPHost>. | |
+Defaults to '/lib/sendmail -t' or '/usr/sbin/sendmail -t'. | |
+ | |
+=item SMTPHost | |
+ | |
+Defines the IP address or hostname of the SMTP server to used to send | |
+email notifications. This functionality requires the Net::SMTP module. | |
+Defaults to localhost. | |
+ | |
+=item SMTPTimeout | |
+ | |
+Defines the timeout in seconds to be used during SMTP connections. This | |
+functionality requires the Net::SMTP module. Defaults to 20 seconds. | |
+ | |
+=item SpawnLogLevel | |
+ | |
+The same as the loglevel directive, but only applies to process spawn actions. | |
+Takes priority over the loglevel directive. May be also be used in a | |
+Process scope which will take priority over a global declaration. | |
+Undefined by default. | |
+ | |
+=item ProtectSafePIDsQuietly | |
+ | |
+Accepts a boolean value of On or Off. Suppresses all notifications of | |
+preserved process IDs when used in conjunction with the I<LastSafePID> | |
+directive. Defaults to Off. | |
+ | |
+=back | |
+ | |
+=head2 PROCESS SCOPE DIRECTIVES | |
+ | |
+=over 4 | |
+ | |
+=item AdminEmail | |
+ | |
+Defines the email address where notification emails should be sent to. | |
+Takes priority within the process scope over the global I<AdminEmail> directive, | |
+but not over the I<AdminEmail> command line option. | |
+ | |
+=item Instances | |
+ | |
+Defines a maximum number of instances of a process which may run. The | |
+process will be killed once there are more than this number of occurrences | |
+running, and its process ID isn't contained in the defined pid file. | |
+ | |
+=item KillCmd | |
+ | |
+Defines the full command line to be executed in order to gracefully | |
+shutdown or kill a rogue process. If the command returns a boolean true | |
+exit status then it is assumed that the command failed to execute | |
+successfully. If no KillCmd is specified or the command fails, the | |
+process will be killed by sending a SIGKILL signal with the standard | |
+kill() function. Undefined by default. | |
+ | |
+=item NoEmail | |
+ | |
+Accepts a boolean value of True or False. Supresses all notification | |
+emails for this process scope. Defaults to False. | |
+ | |
+=item NoEmailOnKill | |
+ | |
+Accepts a boolean value of True or False. Supresses process killing | |
+notification emails for this process scope. Defaults to False. | |
+ | |
+=item NoEmailOnSpawn | |
+ | |
+Accepts a boolean value of True or False. Supresses process spawning | |
+notification emails for this process scope. Defaults to False. | |
+ | |
+=item PctCpu | |
+ | |
+Defines a maximum allowable percentage of CPU time a process may use. | |
+The process will be killed once its CPU usage exceeds this threshold | |
+and its process ID isn't contained in the defined pidfile. | |
+ | |
+=item PctMem | |
+ | |
+Defines a maximum allowable percentage of total system memory a process | |
+may use. The process will be killed once its memory usage exceeds this | |
+threshold and its process ID isn't contained in the defined pidfile. | |
+ | |
+=item PIDFile | |
+ | |
+Defines the full path and filename of a file created by a process which | |
+contain its main parent process ID. Psmon will not kill the PID number | |
+which is contained within the I<PIDFile>. | |
+ | |
+=item SpawnCmd | |
+ | |
+Defines the full command line to be executed in order to respawn a dead | |
+process. | |
+ | |
+=item TTL | |
+ | |
+Defines a maximum time to live (in seconds) of a process. The process | |
+will be killed once it has been running longer than this value, and | |
+its process ID isn't contained in the defined pidfile. | |
+ | |
+=back | |
+ | |
+=head2 EXAMPLES | |
+ | |
+ <Process syslogd> | |
+ spawncmd /sbin/service syslogd restart | |
+ pidfile /var/run/syslogd.pid | |
+ instances 1 | |
+ pctcpu 70 | |
+ pctmem 30 | |
+ </Process> | |
+ | |
+Syslog is a good example of a process which can get a little full | |
+of itself under certain circumstances, and excessively hog CPU and | |
+memory. Here we will kill off syslogd processes if it exceeds 70% | |
+CPU or 30% memory utilization. | |
+ | |
+Older running copies of syslogd will be killed if they are running, | |
+while leaving the most recently spawned copy which will be listed in | |
+the PID file defined. | |
+ | |
+ <Process httpd> | |
+ spawncmd /sbin/service httpd restart | |
+ pidfile /var/run/httpd.pid | |
+ loglevel LOG_CRIT | |
+ adminemail pager@noc.company.com | |
+ </Process> | |
+ | |
+Here we are monitoring Apache to ensure that it is restarted if | |
+it dies. The pidfile directive in this example is actually | |
+redundant because we have not defined any rule where we should | |
+consider killing any httpd processes. | |
+ | |
+All notifications relating to this process will be logged with the | |
+syslog priority of critical (LOG_CRIT), and all emailed to | |
+pager@noc.company.com which could typically forward to a pager. | |
+ | |
+Any failed attempts to kill or restart a process will automatically | |
+be logged as a syslog priority one level higher than that specified. | |
+If a restart of Apache were to fail in this example, a wall | |
+notification would be broadcast to all interactive terminals | |
+connected to the machine, since the next log priority up from | |
+LOG_CRIT is LOG_EMERG. | |
+ | |
+Note that the functionality to log information to syslog requires | |
+the Unix::Syslog module. In the event that Unix::Syslog is not | |
+installed, PSMon will write all status messages that would have | |
+been destined for syslog, to STDERR instead. | |
+ | |
+ <Process find> | |
+ noemail True | |
+ ttl 3600 | |
+ </Process> | |
+ | |
+Kill old find processes which have been running for over an hour. | |
+Do not send an email notification since it's not too important. | |
+ | |
+=cut | |
+ | |
+ | |
+ | |
+ | |
+# Read the config file and setup signal handlers | |
+%C = read_config($OPT{conf}); | |
+$OPT{dryrun} = 1 if $C{dryrun}; | |
+if ($C{disabled}) { | |
+ $msg->Log('LOG_CRIT', "Your configuration file '$OPT{conf}' is disabled. Remove the 'Disabled True' directive from the file."); | |
+ exit 3; | |
+} | |
+ | |
+ | |
+ | |
+=pod | |
+ | |
+=head1 SIGNALS | |
+ | |
+=over 4 | |
+ | |
+=item HUP | |
+ | |
+Forces an immediate reload of the configuration file. You should | |
+send the HUP signal when you are running psmon as a background | |
+daemon and have altered the psmon.conf file. | |
+ | |
+=item USR1 | |
+ | |
+Forces an immediate scan of the process table. | |
+ | |
+=back | |
+ | |
+=head1 EXIT CODES | |
+ | |
+=over 4 | |
+ | |
+=item Value 0: Exited gracefully | |
+ | |
+The program exited gracefully. | |
+ | |
+=item Value 2: Failure to lookup UID for username | |
+ | |
+The username specified by the --user command line option did not resolve to a valid | |
+UID. | |
+ | |
+=item Value 3: Configuration file is disabled | |
+ | |
+The configuration file is disabled. (It contains an active 'Disabled' directive). | |
+ | |
+=item Value 4: Configuration file does not exist | |
+ | |
+The specified configuration file, (default or user specified) does not exist. | |
+ | |
+=item Value 5: Unable to open PID file handle | |
+ | |
+Failed to open a read-only file handle for the runtime PID file. | |
+ | |
+=item Value 6: Failed to fork | |
+ | |
+An error occurred while attempting to fork the child background daemon process. | |
+ | |
+=item Value 7: Unable to open PID file handle | |
+ | |
+Failed to open a write file handle for the runtime PID file. | |
+ | |
+=back | |
+ | |
+=head1 PERFORMANCE | |
+ | |
+psmon is not especially fast. Much of its time is spent reading the process table. | |
+If the process table is particularly large this can take a number of seconds. | |
+Although is rarely a major problem on todays speedy machines, I have run a few tests | |
+so you take look at the times and decide if you can afford the wait. | |
+ | |
+Approximate figures from release 1.0.3: | |
+ | |
+ CPU OS Open Files/Procs 1m Load Real Time | |
+ PIII 1.1G Mandrake 9.0 10148 / 267 0.01 0m0.430s | |
+ PIII 1.2G Mandrake 9.0 16714 / 304 0.44 0m0.640s | |
+ Celeron 500 Red Hat 6.1 1780 / 81 1.27 0m0.880s | |
+ PII 450 Red Hat 6.0 300 / 23 0.01 0m1.050s | |
+ 2x Xeon 1.8G Mandrake 9.0 90530 / 750 0.38 0m1.130s | |
+ Celeron 500 Red Hat 6.1 1517 / 77 1.00 0m1.450s | |
+ PIII 866 Red Hat 8.0 3769 / 76 0.63 0m1.662s | |
+ PIII 750 Red Hat 6.2 754 / 35 3.50 0m2.170s | |
+ | |
+These production machines were running the latest patched stock distribution kernels. | |
+I have listed the total number of open file descriptors, processes running and 1 minute | |
+load average to give you a slightly better context of the performance. | |
+ | |
+Approximate figures from release 1.17: | |
+ | |
+ CPU OS 1m Load CPU Time | |
+ UltraSPARC-IIe 500Mhz SunOS 5.9 0.10 0m0.550s | |
+ Athlon XP 2400+ 2Ghz RHEL 3.0 1.00 0m0.150s | |
+ | |
+=cut | |
+ | |
+# Run a single check | |
+unless (exists $OPT{daemon}) { | |
+ print "Reopening syslog facility\n" if $OPT{verbose}; | |
+ # Reopen syslog without PERROR (no output to terminal) | |
+ $msg->closelog(); | |
+ $msg->openlog($C{facility}); | |
+ | |
+ # Run a single check | |
+ check_processtable(exists $OPT{user} ? $OPT{user} : ''); | |
+ | |
+# Run as a daemon | |
+} else { | |
+ # Read the config file and setup signal handlers | |
+ $SIG{'HUP'} = sub { | |
+ $msg->Log('LOG_NOTICE', 'Received SIGHUP; reloading configuration'); | |
+ %C = read_config($OPT{conf}); | |
+ }; | |
+ $SIG{'USR1'} = sub { | |
+ $msg->Log('LOG_NOTICE', 'Received SIGUSR1; checking process table immediately'); | |
+ check_processtable(exists $OPT{user} ? $OPT{user} : ''); | |
+ }; | |
+ | |
+ # Figure out the PID file name | |
+ my ($x,$y) = (POSIX::getcwd.$OPT{conf},0); | |
+ for (0..length($x)-1) { $y += ord substr($x,$_,1); } | |
+ my @piddirs = qw(/var/run /tmp .); | |
+ my $pidfile = '/var/run/psmon.pid'; | |
+ for my $piddir (@piddirs) { | |
+ my $pidfile2 = sprintf("%s%s/%s-%s-%s.pid", PREFIX, | |
+ $piddir, | |
+ $SELF, | |
+ ($OPT{user} ? $OPT{user} : $>), | |
+ $y | |
+ ); | |
+ if (-d File::Basename::dirname($pidfile2) && -w File::Basename::dirname($pidfile2)) { | |
+ $pidfile = $pidfile2; | |
+ last; | |
+ } | |
+ } | |
+ | |
+ print "Using PID file $pidfile\n" if $OPT{verbose}; | |
+ | |
+ # Debug | |
+ TRACE("\$OPT{conf} = $OPT{conf}\n"); | |
+ TRACE("\$OPT{default_conf} = $OPT{default_conf}\n"); | |
+ TRACE("\$pidfile = $pidfile\n"); | |
+ | |
+ # Launch in to the background | |
+ daemonize($pidfile); | |
+ | |
+ # Reopen syslog without PERROR (no output to terminal) | |
+ $msg->closelog(); | |
+ $msg->openlog($C{facility}); | |
+ | |
+ # Die if you remove the runtime PID file | |
+ while (-f $pidfile) { | |
+ check_processtable(exists $OPT{user} ? $OPT{user} : ''); | |
+ sleep $C{frequency}; | |
+ } | |
+} | |
+ | |
+# Finish | |
+$msg->Log('LOG_NOTICE', "Terminating.\n"); | |
+$msg->closelog(); | |
+exit; | |
+ | |
+ | |
+ | |
+ | |
+ | |
+######################################## | |
+# User subroutines | |
+ | |
+=pod | |
+ | |
+=head1 SUBROUTINES | |
+ | |
+=over 4 | |
+ | |
+=item check_processtable() | |
+ | |
+Reads the current process table, checks and then executes any appropriate | |
+action to be taken. Does not accept any parameters. | |
+ | |
+=cut | |
+ | |
+sub check_processtable { | |
+ my $uid = shift; | |
+ | |
+ # Slurp in the process table | |
+ my %proc; | |
+ print "Scanning process table\n" if $OPT{verbose}; | |
+ my $t = new Proc::ProcessTable; | |
+ if (!grep(/^fname$/,$t->fields)) { | |
+ $msg->Log('LOG_CRIT', "Process::Table does not support fname on your platform"); | |
+ print "Process::Table does not support fname on your platform\n" if $OPT{verbose}; | |
+ exit 9; | |
+ } | |
+ foreach my $p (@{$t->table}) { | |
+ # Only grab information on processes we have rules for | |
+ next unless $C{process}->{'*'} || $C{process}->{$p->{fname}}; | |
+ | |
+ # Skip processes that don't belong to the specified UID if applicable | |
+ next if $uid && $p->{uid} != $uid; | |
+ | |
+ my $i = !exists $proc{$p->{fname}} ? 0 : @{$proc{$p->{fname}}}; | |
+ $proc{$p->{fname}}->[$i] = { | |
+ pid => $p->{pid}, | |
+ ppid => $p->{ppid}, | |
+ fname => $p->{fname}, | |
+ tty => $p->{ttynum}, | |
+ start => $p->{start}, | |
+ pctcpu => isnumeric($p->{pctcpu}) || 0, | |
+ pctmem => isnumeric($p->{pctmem}) || 0, | |
+ }; | |
+ } | |
+ undef $t; | |
+ | |
+ # Debug | |
+ DUMP('%proc',\%proc); | |
+ | |
+ print "Calculating action to take\n" if $OPT{verbose}; | |
+ | |
+ # Build a list of bad naughty processes | |
+ my %slay; | |
+ foreach my $process (keys %{$C{process}}) { | |
+ next unless exists $proc{$process} || $process eq '*'; | |
+ | |
+ # Debug | |
+ TRACE("Checking $process ... \n"); | |
+ DUMP('$C{process}->{$process}',$C{process}->{$process}); | |
+ | |
+ foreach my $p (@{$proc{$process}}) { | |
+ # Too many instances running | |
+ if ($C{process}->{$process}->{instances} && @{$proc{$process}} > $C{process}->{$process}->{instances}) { | |
+ push @{$slay{$process}}, { | |
+ pid => $p->{pid}, | |
+ cause => 'instances', | |
+ reason => sprintf("%d instances exceeds limit of %d", | |
+ scalar @{$proc{$process}}, | |
+ $C{process}->{$process}->{instances}) | |
+ } | |
+ } | |
+ | |
+ # Exceeded TTL | |
+ if ($C{process}->{$process}->{ttl} && time() - $p->{start} > $C{process}->{$process}->{ttl}) { | |
+ push @{$slay{$process}}, { | |
+ pid => $p->{pid}, | |
+ cause => 'ttl', | |
+ reason => sprintf("%d exceeds TTL of %d", | |
+ time() - $p->{start}, | |
+ $C{process}->{$process}->{ttl}) | |
+ } | |
+ } | |
+ | |
+ # Check CPU and Memory usage | |
+ pctcheck($process,$p,\%slay); | |
+ } | |
+ } | |
+ | |
+ # Check CPU and Memory usage for *ALL* processes | |
+ if ($C{process}->{'*'}) { | |
+ while (my ($process,$proclist) = each %proc) { | |
+ for my $p (@{$proclist}) { | |
+ pctcheck($process,$p,\%slay,'*'); | |
+ } | |
+ } | |
+ } | |
+ | |
+ # Check CPU and Memory usage | |
+ sub pctcheck { | |
+ my ($process,$p,$slayref,$scope) = @_; | |
+ $scope ||= $process; | |
+ | |
+ # Exceeded CPU Percent | |
+ $C{process}->{$scope}->{pctcpu} = isnumeric($C{process}->{$scope}->{pctcpu}); | |
+ if ($C{process}->{$scope}->{pctcpu} && $p->{pctcpu} > $C{process}->{$scope}->{pctcpu}) { | |
+ push @{$slayref->{$process}}, { | |
+ pid => $p->{pid}, | |
+ cause => 'pctcpu', | |
+ reason => sprintf("%.2f%% CPU usage exceeds limit of %.2f%%", | |
+ $p->{pctcpu}, | |
+ $C{process}->{$scope}->{pctcpu}) | |
+ } | |
+ } | |
+ | |
+ # Exceeded Memory Percent | |
+ $C{process}->{$scope}->{pctmem} = isnumeric($C{process}->{$scope}->{pctmem}); | |
+ if ($C{process}->{$scope}->{pctmem} && $p->{pctmem} > $C{process}->{$scope}->{pctmem}) { | |
+ push @{$slayref->{$process}}, { | |
+ pid => $p->{pid}, | |
+ cause => 'pctmem', | |
+ reason => sprintf("%.2f%% memory usage exceeds limit of %.2f%%", | |
+ $p->{pctmem}, | |
+ $C{process}->{$scope}->{pctmem}) | |
+ } | |
+ } | |
+ } | |
+ | |
+ print "Killing bad processes\n" if keys %slay && $OPT{verbose}; | |
+ # Kill naughty processes | |
+ while (my ($process,$aryref) = each %slay) { | |
+ # Decide what loglevel we should report the action as | |
+ my $loglevel = $msg->loglevel($C{process}->{$process}->{killloglevel} || | |
+ $C{process}->{$process}->{loglevel} || | |
+ $C{killloglevel} || $C{loglevel} || $msg->loglevel('LOG_NOTICE')); | |
+ | |
+ # Protect safe process IDs | |
+ if ($C{process}->{$process}->{pidfile} && !$C{process}->{$process}->{ppid}) { | |
+ if (-e $C{process}->{$process}->{pidfile} && open(FH,$C{process}->{$process}->{pidfile})) { | |
+ $C{process}->{$process}->{ppid} = <FH>; | |
+ chomp $C{process}->{$process}->{ppid}; | |
+ close(FH); | |
+ } | |
+ } | |
+ my $ppid = $C{process}->{$process}->{ppid} || 0; | |
+ | |
+ # See about slaying each of these process instances | |
+ foreach my $slayref (@{$aryref}) { | |
+ next if $slayref->{pid} == $ppid | |
+ || $slayref->{pid} == $$ | |
+ || $slayref->{pid} <= 1 | |
+ || $C{neverkillpid} =~ /\b$slayref->{pid}\b/ | |
+ || $C{neverkillprocessname} =~ /(^|\s+)$process(\s+|$)/; | |
+ | |
+ # Define who to mail alerts to | |
+ my $mailto = ($C{process}->{$process}->{noemailonkill} || $C{process}->{$process}->{noemail}) ? '' : | |
+ $OPT{adminemail} ? $OPT{adminemail} : | |
+ $C{process}->{$process}->{adminemail} || $C{adminemail}; | |
+ | |
+ # Try to slay the process | |
+ slay_process($process, $loglevel, $mailto, $slayref, | |
+ exists $C{process}->{$process}->{killcmd} ? $C{process}->{$process}->{killcmd} : ''); | |
+ } | |
+ } | |
+ | |
+ # Spawn any dead processes | |
+ foreach my $process (keys %{$C{process}}) { | |
+ # Only attempt to spawn a process if there are no current instances, and there is a spawncmd directive defined | |
+ if (!exists $proc{$process} && exists $C{process}->{$process}->{spawncmd}) { | |
+ | |
+ # Decide what loglevel we should report the action as | |
+ my $loglevel = $msg->loglevel($C{process}->{$process}->{spawnloglevel} || | |
+ $C{process}->{$process}->{loglevel} || | |
+ $C{spawnloglevel} || $C{loglevel} || $msg->loglevel('LOG_NOTICE')); | |
+ | |
+ # Define who to mail alerts to | |
+ my $mailto = ($C{process}->{$process}->{noemailonspawn} || $C{process}->{$process}->{noemail}) ? '' : | |
+ $OPT{adminemail} ? $OPT{adminemail} : | |
+ $C{process}->{$process}->{adminemail} || $C{adminemail}; | |
+ | |
+ # Try to spawn the process | |
+ spawn_process($process, $loglevel, $mailto, $C{process}->{$process}->{spawncmd}); | |
+ } | |
+ } | |
+ | |
+ # Explicitly nuke it for the paranoid (yes I know it's a locally scoped lexical!) ;-) | |
+ undef %proc; | |
+} | |
+ | |
+=pod | |
+ | |
+=item slay_process() | |
+ | |
+Attempts to kill a process with its killcmd, or failing that using the kill() function. | |
+Accepts the process name, syslog log level, email notification to address and a reference | |
+to the %slay hash. | |
+ | |
+=cut | |
+ | |
+# Type to slay a process | |
+sub slay_process { | |
+ my ($process, $loglevel, $mailto, $slayref, $cmd) = @_; | |
+ | |
+ # Protect safe processes | |
+ if ($slayref->{pid} <= $C{lastsafepid} && !$C{protectsafepidsquietly}) { | |
+ print_init_style("Saving PID $slayref->{pid} ($process) from death",'OK'); | |
+ $msg->alert($loglevel, $mailto, "Saved safe PID $slayref->{pid} ($process) from death"); | |
+ | |
+ # This process is not protected | |
+ } else { | |
+ print_init_style("Killing PID $slayref->{pid} ($process)"); | |
+ | |
+ my $tmplog = POSIX::tmpnam(); | |
+ my $cmdrtn = $cmd && !exists $OPT{dryrun} ? system("$cmd >$tmplog 2>&1") : 0; | |
+ if ($cmd) { # Tried to stop with the killcmd directive | |
+ my ($exit_value, $signal_num, $dumped_core) = ($? >> 8, $? & 127, $? & 128); | |
+ if ($cmdrtn) { | |
+ print_init_style('FAILED'); | |
+ $msg->alert($loglevel-1, $mailto, | |
+ "Failed to execute '$cmd' to kill PID $slayref->{pid} ($process)", | |
+ "Command executed: $cmd", | |
+ "Exit value: $exit_value", | |
+ "Signal number: $signal_num", | |
+ "Dumped core?: $dumped_core",'', | |
+ slurp_tmplog($tmplog), | |
+ ); | |
+ } else { | |
+ print_init_style('OK'); | |
+ $msg->alert($loglevel, $mailto, "Executed '$cmd' to kill PID $slayref->{pid} ($process)"); | |
+ } | |
+ } | |
+ | |
+ # Don't try if killcmd was tried and succeded | |
+ unless ($cmd && !$cmdrtn) { | |
+ my $killrtn = !exists $OPT{dryrun} ? kill(9,$slayref->{pid}) : 1; | |
+ if ($killrtn) { | |
+ print_init_style('KILLED'); | |
+ $msg->alert($loglevel, $mailto, "Killed PID $slayref->{pid} ($process) because $slayref->{reason}"); | |
+ } else { | |
+ print_init_style('FAILED'); | |
+ $msg->alert($loglevel-1, $mailto, "Failed to kill PID $slayref->{pid} ($process)"); | |
+ } | |
+ } | |
+ } | |
+} | |
+ | |
+=pod | |
+ | |
+=item slurp_tmplog() | |
+ | |
+Slurps up the contents of a temporary log file and returns it as a chomped | |
+array after unlinking the temporary log file. | |
+ | |
+=cut | |
+ | |
+sub slurp_tmplog { | |
+ my $tmplog = shift; | |
+ my @rtn; | |
+ if (open(TMPLOG,"<$tmplog")) { | |
+ while (<TMPLOG>) { | |
+ chomp; | |
+ push @rtn, $_; | |
+ } | |
+ close(TMPLOG); | |
+ } | |
+ unlink $tmplog; | |
+ return @rtn; | |
+} | |
+ | |
+=pod | |
+ | |
+=item print_init_style() | |
+ | |
+Prints a Red Hat sysvinit style status message. Accepts an array of messages | |
+to display in sequence. | |
+ | |
+=cut | |
+ | |
+# Print a Red Hat sysinitv style status message | |
+sub print_init_style { | |
+ return if $OPT{daemon}; | |
+ foreach my $message (@_) { | |
+ if (length($message) <= 6) { | |
+ print "\033[60G\["; | |
+ if (exists $OPT{dryrun}) { print "\033[1;33mDRYRUN"; } | |
+ elsif ($message eq 'OK') { print "\033[1;32m OK "; } | |
+ elsif ($message eq 'FAILED') { print "\033[1;31m$message"; } | |
+ elsif ($message eq 'KILLED' || $message eq 'DRYRUN') { print "\033[1;33m$message"; } | |
+ print "\033[0;39m\]\n"; | |
+ } else { | |
+ print $message; | |
+ } | |
+ } | |
+} | |
+ | |
+=pod | |
+ | |
+=item spawn_process() | |
+ | |
+Attempts to spawn a process. Accepts the process name, syslog log level, mail | |
+notification to address and spawn command. | |
+ | |
+=cut | |
+ | |
+# Spawn a process | |
+sub spawn_process { | |
+ my ($process, $loglevel, $mailto, $cmd) = @_; | |
+ | |
+ print_init_style("Starting $process"); | |
+ my $tmplog = POSIX::tmpnam(); | |
+ my $rtn = !exists $OPT{dryrun} ? system("$cmd >$tmplog 2>&1") : 0; | |
+ my ($exit_value, $signal_num, $dumped_core) = ($? >> 8, $? & 127, $? & 128); | |
+ if ($rtn) { | |
+ print_init_style('FAILED'); | |
+ $msg->alert($loglevel-1, $mailto, "Failed to spawn '$process' with '$cmd'", | |
+ "Command executed: $cmd", | |
+ "Exit value: $exit_value", | |
+ "Signal number: $signal_num", | |
+ "Dumped core?: $dumped_core",'', | |
+ slurp_tmplog($tmplog), | |
+ ); | |
+ } else { | |
+ print_init_style('OK'); | |
+ $msg->alert($loglevel, $mailto, "Spawned '$process' with '$cmd'", | |
+ "Command executed: $cmd", | |
+ "Exit value: $exit_value", | |
+ "Signal number: $signal_num", | |
+ "Dumped core?: $dumped_core",'', | |
+ slurp_tmplog($tmplog), | |
+ ); | |
+ } | |
+} | |
+ | |
+=pod | |
+ | |
+=item display_help() | |
+ | |
+Displays command line help. | |
+ | |
+=cut | |
+ | |
+# Command line help | |
+sub display_help { | |
+ my $rtn = shift; | |
+ require Pod::Usage; | |
+ Pod::Usage::pod2usage(-verbose => 2); | |
+ exit($rtn) if defined $rtn; | |
+} | |
+ | |
+sub is_superuser { | |
+ my $uid = shift; | |
+ return 1 if $uid == 0; | |
+} | |
+ | |
+sub get_config_to_read_from { | |
+ my $filename = shift || ''; | |
+ | |
+ my $retval = sprintf('%s/etc/psmon.conf',$ENV{HOME}); | |
+ if (-f $filename && -r $filename) { | |
+ $retval = $filename; | |
+ } elsif (is_superuser($>)) { | |
+ $retval = $OPT{default_conf}; | |
+ } | |
+ | |
+ print "Using $retval configuration file\n" if $OPT{verbose}; | |
+ return $retval; | |
+} | |
+ | |
+=pod | |
+ | |
+=item parse_user_to_run_as() | |
+ | |
+Determine what UID to scan for in the process table. | |
+ | |
+=cut | |
+ | |
+sub parse_user_to_run_as { | |
+ if (exists $OPT{user}) { | |
+ my $name = $OPT{user}; | |
+ $OPT{user} = scalar getpwnam($OPT{user}) || ''; | |
+ unless ($OPT{user}) { | |
+ $msg->Log('LOG_CRIT', "Invalid user specified: '$name'"); | |
+ exit 2; | |
+ } | |
+ } elsif (!is_superuser($>) && !exists $OPT{nouser}) { | |
+ $OPT{user} = $>; | |
+ } | |
+ if ($OPT{verbose} && exists $OPT{user} && length($OPT{user} >= 1)) { | |
+ my $name = scalar getpwuid($OPT{user}); | |
+ print "Scanning for processes owned by UID $OPT{user} ($name)\n"; | |
+ } | |
+} | |
+ | |
+ | |
+=pod | |
+ | |
+=item read_config() | |
+ | |
+Reads in runtime configuration options. | |
+ | |
+=cut | |
+ | |
+# Read in the config | |
+sub read_config { | |
+ my $config_file = shift; | |
+ | |
+ # Barf and die if there's no configuration file! | |
+ unless (-e $config_file) { | |
+ $msg->Log('LOG_CRIT', "Configuration file $config_file does not exist\n"); | |
+ exit 4; | |
+ } | |
+ | |
+ # Define default configuration values | |
+ my %default = ( | |
+ facility => 'LOG_DAEMON', | |
+ loglevel => 'LOG_NOTICE', | |
+ adminemail => 'root@localhost', | |
+ notifyemailfrom => sprintf('%s@%s',(getpwuid($>))[0],(POSIX::uname())[1]), | |
+ smtphost => 'localhost', | |
+ smtptimeout => 20, | |
+ sendmailcmd => (-e '/lib/sendmail' ? '/lib/sendmail -t' : '/usr/sbin/sendmail -t'), | |
+ defaultemailmethod => 'sendmail', | |
+ frequency => 60, | |
+ lastsafepid => 100, | |
+ neverkillpid => 1, | |
+ neverkillprocessname => 'devfsadmd kswapd kupdated mdrecoveryd pageout sched init fsflush', | |
+ protectsafepidsquietly => 0, | |
+ ); | |
+ | |
+ # Read config file | |
+ my $conf = new Config::General( | |
+ -ConfigFile => $config_file, | |
+ -LowerCaseNames => 1, | |
+ -UseApacheInclude => 1, | |
+ -IncludeRelative => 1, | |
+ -DefaultConfig => \%default, | |
+ -MergeDuplicateBlocks => 1, | |
+ -AllowMultiOptions => 1, | |
+ -MergeDuplicateOptions => 1, | |
+ -AutoTrue => 1, | |
+ ); | |
+ print "Reading configuration file\n" if $OPT{verbose}; | |
+ my %config = $conf->getall; | |
+ | |
+ # Force default values for dodgy user configuration options | |
+ $config{frequency} = $default{frequency} unless $config{frequency} =~ /^\d+$/; | |
+ $config{lastsafepid} = isnumeric($config{lastsafepid}) || $default{lastsafepid}; | |
+ | |
+ # AdminEmail used to be (incorrectly) defined as NotifyEmail in the config file | |
+ $config{adminemail} = $config{notifyemail} if $config{notifyemail}; | |
+ | |
+ return %config; | |
+} | |
+ | |
+ | |
+ | |
+ | |
+ | |
+######################################## | |
+# Subroutines | |
+ | |
+=pod | |
+ | |
+=item isnumeric() | |
+ | |
+An evil bastard fudge to ensure that we're only dealing with numerics when | |
+necessary, from the config file and Proc::ProcessTable scan. | |
+ | |
+=cut | |
+ | |
+sub isnumeric { | |
+ local $_ = shift || ''; | |
+ if (/^\s*(\-?[\d\.]+)\s*/) { return $1; } | |
+ return undef; | |
+} | |
+ | |
+=pod | |
+ | |
+=item daemonize() | |
+ | |
+Launches the process in to the background. Checks to see if there is already an | |
+instance running. | |
+ | |
+=cut | |
+ | |
+# Daemonize self | |
+sub daemonize { | |
+ my $pidfile = shift; | |
+ # Check that we're not already running, and quit if we are | |
+ if (-f $pidfile) { | |
+ unless (open(PID,$pidfile)) { | |
+ $msg->Log('LOG_CRIT', "Unable to open file handle PID for file '$pidfile': $!\n"); | |
+ exit 5; | |
+ } | |
+ my $pid = <PID>; | |
+ close(PID) || $msg->Log('LOG_WARNING', "Unable to close file handle PID for file '$pidfile': $!\n"); | |
+ | |
+ # This is a good method to check the process is still running (Linux only) | |
+ if (-f "/proc/$pid/stat") { | |
+ open(FH,"/proc/$pid/stat") || $msg->Log('LOG_WARNING', "Unable to open file handle FH for file '/proc/$pid/stat': $!\n"); | |
+ my $line = <FH>; | |
+ close(FH) || $msg->Log('LOG_WARNING', "Unable to close file handle FH for file '/proc/$pid/stat': $!\n"); | |
+ if ($line =~ /\d+[^(]*\((.*)\)\s*/) { | |
+ my $process = $1; | |
+ if ($process =~ /^$SELF$/) { | |
+ $msg->Log('LOG_NOTICE', "$SELF already running at PID $pid; exiting.\n") unless exists $OPT{cron}; | |
+ $msg->closelog(); | |
+ exit 0; | |
+ } | |
+ } | |
+ | |
+ # This will work on other UNIX flavors | |
+ } elsif (kill(0,$pid)) { | |
+ $msg->Log('LOG_NOTICE', "$SELF already running at PID $pid; exiting.\n") unless exists $OPT{cron}; | |
+ $msg->closelog(); | |
+ exit 0; | |
+ | |
+ # Otherwise the PID file is old and stale | |
+ } else { | |
+ $msg->Log('LOG_NOTICE', "Removing stale PID file.\n"); | |
+ unlink($pidfile); | |
+ } | |
+ } | |
+ | |
+ # Daemon parent about to spawn | |
+ if (my $pid = fork) { | |
+ $msg->Log('LOG_NOTICE', "Forking background daemon, process $pid.\n"); | |
+ $msg->closelog(); | |
+ exit 0; | |
+ | |
+ # Child daemon process that was spawned | |
+ } else { | |
+ # Fork a second time to get rid of any attached terminals | |
+ if (my $pid = fork) { | |
+ $msg->Log('LOG_NOTICE', "Forking second background daemon, process $pid.\n"); | |
+ $msg->closelog(); | |
+ exit 0; | |
+ } else { | |
+ unless (defined $pid) { | |
+ $msg->Log('LOG_CRIT', "Cannot fork: $!\n"); | |
+ exit 6; | |
+ } | |
+ close(STDOUT); close(STDERR); chdir '/'; | |
+ unless (open(FH,">$pidfile")) { | |
+ $msg->Log('LOG_CRIT', "Unable to open file handle FH for file '$pidfile': $!\n"); | |
+ exit 7; | |
+ } | |
+ print FH $$; | |
+ close(FH) || $msg->Log('LOG_WARNING', "Unable to close file handle FH for file '$pidfile': $!\n"); | |
+ } | |
+ } | |
+} | |
+ | |
+=pod | |
+ | |
+=item display_version() | |
+ | |
+Displays complete version, author and license information. | |
+ | |
+=item TRACE() | |
+ | |
+Prints trace information to STDOUT if the DEBUG constant has been set to | |
+boolean true. The DEBUG constant is set to boolean true in the event that | |
+the environment variable PSMon_DEBUG is also set to boolean true. | |
+ | |
+=item DUMP() | |
+ | |
+See TRACE(). | |
+ | |
+=back | |
+ | |
+=head2 PSMon::Logging METHODS | |
+ | |
+=over 4 | |
+ | |
+=item new() | |
+ | |
+Creates a new PSMon::Logging object. | |
+ | |
+=item openlog() | |
+ | |
+Opens a connection to syslog using Unix::Syslog. | |
+ | |
+=item closelog() | |
+ | |
+Closes a connection to syslog. | |
+ | |
+=item loglevel() | |
+ | |
+Accepts a syslog loglevel keyword and returns the associated constant integer. | |
+ | |
+=item logfacility() | |
+ | |
+Accepts a syslog facility keyword and returns the associated constant integer. | |
+ | |
+=item alert() | |
+ | |
+Logs a message to syslog using Log() and sends a notification email using | |
+sendmail(). | |
+ | |
+=item Log() | |
+ | |
+Logs messages to DAEMON facility in syslog. Accepts a log | |
+level and message array. Will terminate the process if it is | |
+asked to log a message of a log level 2 or less (LOG_EMERG, | |
+LOG_ALERT, LOG_CRIT). | |
+ | |
+=item sendmail() | |
+ | |
+Sends email notifications of syslog messages, called by alert(). | |
+Accepts sending email address, recipient email address, short | |
+message subject and an optional detailed message body array. | |
+ | |
+=item _sendmail_sendmail() | |
+ | |
+Called by sendmail(), sends an email using the sendmail command. | |
+ | |
+=item _sendmail_smtp() | |
+ | |
+Called by sendmail(), sends an email using the Net::SMTP module. | |
+ | |
+=back | |
+ | |
+=head2 Unix::Syslog STUB METHODS | |
+ | |
+The __DATA__ section of the PSMon code contains a stub version of the | |
+Unix::Syslog module. It is automatically loaded in the event that the | |
+real Unix::Syslog module is not present and/or cannot be loaded. This stub | |
+module provides very basic functionality to output the messages generated | |
+by the PSMon::Logging module to STDERR, instead of simply dropping them. | |
+ | |
+=over 4 | |
+ | |
+=item _timestamp() | |
+ | |
+Retuns a timestamp string which closely resembles timestamps | |
+used by syslog. | |
+ | |
+=item syslog() | |
+ | |
+Outputs a syslog formatted and timestamped message to STDERR. | |
+ | |
+=item openlog() | |
+ | |
+Stub. | |
+ | |
+=item closelog() | |
+ | |
+Stub. | |
+ | |
+=item setlogmask() | |
+ | |
+Stub. | |
+ | |
+=item priorityname() | |
+ | |
+Stub. | |
+ | |
+=item facilityname() | |
+ | |
+Stub. | |
+ | |
+=back | |
+ | |
+ | |
+=cut | |
+ | |
+# Display version information | |
+sub display_version { | |
+ my $rtn = shift; | |
+ print "$SELF $VERSION\n"; | |
+ print "$VERSION\n"; | |
+ print "Written by Nicola Worthington, <nicolaw\@cpan.org>.\n\n"; | |
+ print "Copyright (C) 2002,2003,2004,2005 Nicola Worthington.\n\n"; | |
+ print <<EOL; | |
+This program is free software; you can redistribute it and/or | |
+modify it under the terms of the GNU General Public License | |
+as published by the Free Software Foundation; either version 2 | |
+of the License, or (at your option) any later version. | |
+ | |
+This program is distributed in the hope that it will be useful, | |
+but WITHOUT ANY WARRANTY; without even the implied warranty of | |
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
+GNU General Public License for more details. | |
+ | |
+You should have received a copy of the GNU General Public License | |
+along with this program; if not, write to the Free Software | |
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
+EOL | |
+ exit($rtn) if defined $rtn; | |
+} | |
+ | |
+ | |
+ | |
+ | |
+ | |
+=pod | |
+ | |
+=head1 BUGS | |
+ | |
+Hopefully none. ;-) Send any bug reports to me at nicolaw@cpan.org | |
+along with any patches and details of how to replicate the problem. | |
+Please only send reports for bugs which can be replicated in the | |
+I<latest> version of the software. The latest version can always be | |
+found at http://search.cpan.org/~nicolaw/ | |
+ | |
+=head1 TODO | |
+ | |
+The following functionality will be added soon: | |
+ | |
+=over 4 | |
+ | |
+=item Code cleanup | |
+ | |
+The code needs to be cleaned up and made more efficient. The bulk of the | |
+code will be moved to a separate module, and psmon as you know it now will | |
+become a much smaller and simpler wrapper script. | |
+ | |
+=item Apply contributed patches | |
+ | |
+Users of psmon have sent me various patches for additional functionality. | |
+These will be incorporated in to the next major release of psmon once the | |
+code has been properly abstracted. | |
+ | |
+=item killperprocessname directive | |
+ | |
+Will accept a boolean value. If true, only 1 process per process scope | |
+will ever be killed, instead of all process IDs matching kill rules. | |
+This should be used in conjunction with the new killcmd directive. For | |
+example, you may define that a database daemon may never take up more | |
+than 90% CPU time, and it runs many children processes. If it exceeds | |
+90% CPU time, you want to issue ONE restart command in order to stop and | |
+then start all the database processes in one go. | |
+ | |
+=item time period limited rules | |
+ | |
+Functionality to limit validity of process scopes to only be checked | |
+between defined time periods. For example, only check that httpd is running | |
+between the hours of 8am and 5pm on Mondays and Tuesdays. | |
+ | |
+=back | |
+ | |
+=head1 SEE ALSO | |
+ | |
+nsmon | |
+ | |
+=head1 LICENSE | |
+ | |
+Written by Nicola Worthington, <nicolaw@cpan.org>. | |
+Copyright (C) 2002,2003,2004,2005 Nicola Worthington. | |
+ | |
+This program is free software; you can redistribute it and/or | |
+modify it under the terms of the GNU General Public License | |
+as published by the Free Software Foundation; either version 2 | |
+of the License, or (at your option) any later version. | |
+ | |
+This program is distributed in the hope that it will be useful, | |
+but WITHOUT ANY WARRANTY; without even the implied warranty of | |
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
+GNU General Public License for more details. | |
+ | |
+You should have received a copy of the GNU General Public License | |
+along with this program; if not, write to the Free Software | |
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
+ | |
+=head1 AUTHOR | |
+ | |
+Nicola Worthington <nicolaw@cpan.org> | |
+ | |
+http://search.cpan.org/~nicolaw/ | |
+ | |
+http://www.psmon.com | |
+ | |
+http://www.nicolaworthington.com | |
+ | |
+=cut | |
+ | |
+sub TRACE { | |
+ return unless PSMon::DEBUG; | |
+ warn(shift()); | |
+} | |
+ | |
+sub DUMP { | |
+ return unless PSMon::DEBUG; | |
+ eval { | |
+ require Data::Dumper; | |
+ warn(shift().': '.Data::Dumper::Dumper(shift())); | |
+ } | |
+} | |
+ | |
+1; | |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | |
+package PSMon::Logging; | |
+ | |
+use strict; | |
+use Carp qw(croak); | |
+use POSIX (); | |
+ | |
+# Create a new logging object | |
+sub new { | |
+ ref(my $class = shift) && croak 'Class name required'; | |
+ croak 'Odd number of elements passed when even number was expected' if @_ % 2; | |
+ my $self = { @_ }; | |
+ bless($self,$class); | |
+ | |
+ # Try to load Net::SMTP | |
+ eval { require Net::SMTP; }; | |
+ $self->{'Net::SMTP'} = $@ ? 0 : 1; | |
+ | |
+ # Try to load Unix::Syslog | |
+ eval { require Unix::Syslog; import Unix::Syslog; }; | |
+ $self->{'Unix::Syslog'} = $@ ? 0 : 1; | |
+ | |
+ # Load stub version of Unix::Syslog in <DATA> if necessary | |
+ unless ($self->{'Unix::Syslog'}) { | |
+ eval join '', <DATA>; | |
+ die $@ if $@; | |
+ } | |
+ | |
+ # Debug | |
+ PSMon::DUMP('$self',$self); | |
+ PSMon::DUMP('%INC',\%INC); | |
+ | |
+ # Open default syslog facility with TTY output | |
+ print "Opening default syslog facility\n" if exists $self->{options}->{verbose}; | |
+ | |
+ # LOG_PERRER isn't available on all systems | |
+ no strict; | |
+ my $options = Unix::Syslog::LOG_PID(); | |
+ if (Unix::Syslog::LOG_PERROR() =~ /^\d+$/) { | |
+ $options = Unix::Syslog::LOG_PID() | Unix::Syslog::LOG_PERROR(); | |
+ } else { | |
+ $self->{EMULATE_PERROR} = 1; | |
+ } | |
+ | |
+ # Open syslog | |
+ Unix::Syslog::openlog($self->{SELF}, $options, $self->logfacility()); | |
+ | |
+ return $self; | |
+} | |
+ | |
+# Close syslog | |
+sub closelog { | |
+ my $self = shift; | |
+ Unix::Syslog::closelog(); | |
+ delete $self->{EMULATE_PERROR}; | |
+} | |
+ | |
+# Open syslog | |
+sub openlog { | |
+ my $self = shift; | |
+ my $facility = $self->logfacility(shift); | |
+ | |
+ #delete $self->{EMULATE_PERROR}; | |
+ no strict; | |
+ Unix::Syslog::openlog($self->{SELF}, Unix::Syslog::LOG_PID(), $facility); | |
+} | |
+ | |
+# Get the loglevel value | |
+sub loglevel { | |
+ my $self = shift; | |
+ local $_ = shift || ''; | |
+ return $_ if /^\d+$/; | |
+ { | |
+ no strict; | |
+ return exists &{"Unix::Syslog::$_"} ? &{"Unix::Syslog::$_"} : Unix::Syslog::LOG_NOTICE(); | |
+ } | |
+} | |
+ | |
+# Get the logfacility value | |
+sub logfacility { | |
+ my $self = shift; | |
+ local $_ = shift || ''; | |
+ return $_ if /^\d+$/; | |
+ { | |
+ no strict; | |
+ return exists &{"Unix::Syslog::$_"} ? &{"Unix::Syslog::$_"} : Unix::Syslog::LOG_DAEMON(); | |
+ } | |
+} | |
+ | |
+# Report something to user and syslog | |
+sub alert { | |
+ my $self = shift; | |
+ my ($LOG_TYPE,$mailto,$subject,@ary) = @_; | |
+ | |
+ $subject ||= 'undef alert message'; | |
+ $subject .= ' [DRYRUN]' if exists $self->{options}->{dryrun}; | |
+ | |
+ $self->Log($LOG_TYPE, $subject); | |
+ $self->sendmail(from => $self->{config}->{notifyemailfrom}, | |
+ to => $mailto, | |
+ subject => $subject, | |
+ body => \@ary) if $mailto; | |
+} | |
+ | |
+# Log something to syslog | |
+sub Log { | |
+ my $self = shift; | |
+ my ($loglevel,@msg) = @_; | |
+ | |
+ $loglevel = $self->loglevel($loglevel); | |
+ @msg = '' unless @msg; | |
+ unshift @msg,'Process exiting!' if $loglevel <= 2; | |
+ { # Unix::Syslog gets unhappy for its sprintf stuff otherwise :) | |
+ (my $syslogmsg = "@msg") =~ s/%/%%/g; | |
+ Unix::Syslog::syslog($loglevel, $syslogmsg); | |
+ chomp $syslogmsg; | |
+ print "$syslogmsg\n" if $self->{EMULATE_PERROR}; | |
+ } | |
+} | |
+ | |
+# Send an email | |
+sub sendmail { | |
+ my $self = shift; | |
+ my $param = { @_ }; | |
+ | |
+ # Define the email body | |
+ my @body = ref($param->{body}) eq 'ARRAY' ? @{$param->{body}} : ($param->{subject}); | |
+ $param->{subject} = sprintf("[%s/%s] %s",$self->{SELF},(POSIX::uname())[1],$param->{subject}); | |
+ unshift @body, "Subject: $param->{subject}\n"; | |
+ unshift @body, "To: \"$param->{to}\" <$param->{to}>"; | |
+ unshift @body, "From: \"$param->{from}\" <$param->{from}>"; | |
+ | |
+ # Debug | |
+ PSMon::DUMP('$param',$param); | |
+ PSMon::DUMP('@body',\@body); | |
+ | |
+ # Use sendmail by default with failover to SMTP | |
+ if (exists $self->{config}->{defaultemailmethod} && $self->{config}->{defaultemailmethod} !~ /smtp/i) { | |
+ unless ($self->_sendmail_sendmail($param,@body)) { | |
+ $self->Log('LOG_WARNING', "Unable to send email using sendmail command $self->{config}->{sendmailcmd}; attempting SMTP connection to $self->{config}->{smtphost} instead"); | |
+ $self->_sendmail_smtp($param,@body); | |
+ } | |
+ | |
+ # Otherwise SMTP with failover to sendmail | |
+ } else { | |
+ unless ($self->_sendmail_smtp($param,@body)) { | |
+ $self->Log('LOG_WARNING', "Unable to establish SMTP connection with $self->{config}->{smtphost}; attempting sendmail pipe instead"); | |
+ $self->_sendmail_sendmail($param,@body); | |
+ } | |
+ } | |
+} | |
+ | |
+# Send an email using sendmail | |
+sub _sendmail_sendmail { | |
+ my ($self,$param,@body) = @_; | |
+ | |
+ # Check that the SendMailCmd file is valid to execute | |
+ (my $executable = $self->{config}->{sendmailcmd}) =~ s/\s.*//; | |
+ if (!-f $executable) { | |
+ $self->Log('LOG_WARNING', "Defined SendMailCmd file '$executable' does not exist"); | |
+ return 0; | |
+ } elsif (!-x $executable) { | |
+ $self->Log('LOG_WARNING', "Defined SendMailCmd file '$executable' is not executable"); | |
+ return 0; | |
+ } | |
+ | |
+ # Open a pipe file handle to the SendMailCmd executable | |
+ if (open(PH,"|$self->{config}->{sendmailcmd}")) { | |
+ print PH "$_\n" for @body; | |
+ if (close(PH)) { | |
+ return 1; | |
+ } else { | |
+ $self->Log('LOG_WARNING', "Unable to close pipe handle PH for command '|$self->{config}->{sendmailcmd}': $!"); | |
+ return 0; | |
+ } | |
+ } else { | |
+ $self->Log('LOG_WARNING', "Unable to open pipe handle PH for command '|$self->{config}->{sendmailcmd}': $!"); | |
+ return 0; | |
+ } | |
+} | |
+ | |
+# Send an email using Net::SMTP | |
+sub _sendmail_smtp { | |
+ my ($self,$param,@body) = @_; | |
+ return 0 unless $self->{'Net::SMTP'}; | |
+ | |
+ # Create a new Net::SMTP object | |
+ my $smtp = Net::SMTP->new( | |
+ $self->{config}->{smtphost}, | |
+ Timeout => $self->{config}->{smtptimeout}, | |
+ Hello => (POSIX::uname())[1], | |
+ ); | |
+ | |
+ if ($smtp) { | |
+ $smtp->mail($param->{from}); | |
+ $smtp->to($param->{to}); | |
+ $smtp->data(join("\n",@body)); | |
+ $smtp->dataend(); | |
+ return 1; | |
+ } else { | |
+ $self->Log('LOG_WARNING', "Unable to establish SMTP connection with $self->{config}->{smtphost}"); | |
+ return 0; | |
+ } | |
+} | |
+ | |
+1; | |
+ | |
+__DATA__ | |
+ | |
+package Unix::Syslog; | |
+ | |
+use strict; | |
+use POSIX (); | |
+use vars qw($VERSION $IDENT $HOSTNAME); | |
+$VERSION = '0.01'; | |
+ | |
+use constant LOG_EMERG => 0; | |
+use constant LOG_ALERT => 1; | |
+use constant LOG_CRIT => 2; | |
+use constant LOG_ERR => 3; | |
+use constant LOG_WARNING => 4; | |
+use constant LOG_NOTICE => 5; | |
+use constant LOG_INFO => 6; | |
+use constant LOG_DEBUG => 7; | |
+ | |
+sub _timestamp { | |
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); | |
+ my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); | |
+ return sprintf('%s %2d %2d:%02d:%02d', $months[$mon], $mday, $hour, $min, $sec); | |
+} | |
+ | |
+sub syslog { | |
+ my $message = $_[1]; chomp $message; | |
+ warn sprintf("%s %s %s[%d]: %s\n", | |
+ _timestamp(), $HOSTNAME, $IDENT, $$, $message | |
+ ); | |
+} | |
+ | |
+sub openlog { | |
+ $IDENT = shift || 'psmon'; | |
+ $HOSTNAME = (POSIX::uname())[1]; | |
+} | |
+ | |
+# Stubs which do nothing | |
+use constant LOG_PERROR => 1; | |
+use constant LOG_PID => 1; | |
+ | |
+sub closelog {} | |
+sub setlogmask {} | |
+sub priorityname {} | |
+sub facilityname {} | |
+ | |
+1; | |
+ | |
diff --git a/psmon-1.29/bin/psmon-config b/psmon-1.29/bin/psmon-config | |
new file mode 100755 | |
index 0000000..4b94d57 | |
--- /dev/null | |
+++ b/psmon-1.29/bin/psmon-config | |
@@ -0,0 +1,514 @@ | |
+#!/usr/bin/perl -w | |
+############################################################ | |
+# $Id: psmon-config,v 1.5 2005/05/06 12:50:20 nicolaw Exp $ | |
+# psmon.conf - Example psmon Configuration File | |
+# Copyright: (c)2002,2003,2004,2005 Nicola Worthington. All rights reserved. | |
+############################################################ | |
+# This file is part of psmon. | |
+# | |
+# psmon is free software; you can redistribute it and/or modify | |
+# it under the terms of the GNU General Public License as published by | |
+# the Free Software Foundation; either version 2 of the License, or | |
+# (at your option) any later version. | |
+# | |
+# psmon is distributed in the hope that it will be useful, | |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
+# GNU General Public License for more details. | |
+# | |
+# You should have received a copy of the GNU General Public License | |
+# along with psmon; if not, write to the Free Software | |
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
+############################################################ | |
+ | |
+use strict; | |
+use warnings; | |
+use English; | |
+use Term::ReadLine (); | |
+use Proc::ProcessTable (); | |
+use Config::General (); | |
+use Text::Wrap qw(wrap); | |
+use POSIX (); | |
+ | |
+use vars qw($VERSION $SELF); | |
+ | |
+$OUTPUT_AUTOFLUSH = 1; | |
+($SELF = $PROGRAM_NAME) =~ s|^.*/||; | |
+$VERSION = sprintf('%d.%02d', q$Revision: 1.5 $ =~ /(\d+)/g); | |
+$Text::Wrap::columns = 77; | |
+ | |
+# Create Term::Realine object | |
+my $term = new Term::ReadLine $SELF; | |
+ | |
+ | |
+# Start header of config output | |
+my $str = sprintf("# Generated by %s, by %s@%s\n", $SELF, | |
+ (getpwuid($EFFECTIVE_USER_ID))[0], (POSIX::uname())[1] | |
+ ); | |
+$str .= sprintf("# Created at %s\n\n",scalar localtime); | |
+ | |
+$str .= "# Please read through your configuration file before using it in production!\n"; | |
+$str .= "Disabled True\n\n"; | |
+ | |
+ | |
+# Print some information | |
+print <<EOT; | |
+psmon-config will ask you a series of questions to help you quickly generate a | |
+valid configuration file. It is reccomended that you then review (and edit) the | |
+resulting configuration file in a text editor of your choice before allowing it | |
+to be used in a production environment. | |
+EOT | |
+ | |
+ | |
+# Get global directives | |
+my $directives = get_directives(); | |
+for my $directive (sort keys(%{$directives})) { | |
+ (my $help = $directives->{$directive}->[1]) =~ s/\s\s+/ /g; | |
+ printf("\n%-13s%s\n",'Directive:',$directive); | |
+ print wrap('Description: ',' ',"$help\n"); | |
+ printf("%-13s%s\n",'Defaults to:',$directives->{$directive}->[0]) if $directives->{$directive}->[0]; | |
+ | |
+ my $prompt = "Specify $directive? [".($directives->{$directive}->[0] ? 'y/N' : 'Y/n')."]: "; | |
+ $_ = $term->readline($prompt); | |
+ redo unless /^\s*(y|n)?\s*$/i; | |
+ | |
+ #$str .= sprintf("# %-13s%s\n",'Directive:',$directive); | |
+ #$str .= wrap('# Description: ','# ',"$help\n"); | |
+ $str .= wrap('# ','# ',"$help\n"); | |
+ $str .= sprintf("# %-13s%s\n",'Defaults to:',$directives->{$directive}->[0]) if $directives->{$directive}->[0]; | |
+ | |
+ if ($_ =~ /y/ || (!length($directives->{$directive}->[0]) && $_ !~ /n/)) { | |
+ $str .= sprintf("%s %s\n\n",$directive,get_value('Value?: ')); | |
+ } else { | |
+ $str .= "$directive $directives->{$directive}->[0]\n\n"; | |
+ } | |
+} | |
+ | |
+ | |
+# Print some information about process scope directives | |
+print <<EOT; | |
+ | |
+psmon-config.pl will now scan your process table for background daemon | |
+processes. You can then select which of these processes you wish to monitor, | |
+in order to ensure they are always running and/or do not exceed specified | |
+resource limits. | |
+ | |
+EOT | |
+ | |
+ | |
+# Scan the process table | |
+print "Scanning your process table ... "; | |
+my $daemons = {}; | |
+my $p = new Proc::ProcessTable( 'cache_ttys' => 1 ); | |
+for my $process (@{$p->table}) { | |
+ unless ($process->{ttynum} || $process->{ttydev}) { | |
+ my ($executable) = $process->{cmndline} =~ /^\s*(\S+)/; | |
+ if (-f $executable) { | |
+ my $instances = 1; | |
+ if (exists $daemons->{$process->{cmndline}}) { | |
+ $instances += $daemons->{$process->{cmndline}}->{instances}; | |
+ } | |
+ $daemons->{$process->{cmndline}} = $process; | |
+ $daemons->{$process->{cmndline}}->{instances} = $instances; | |
+ } | |
+ } | |
+} | |
+print "done\n"; | |
+ | |
+ | |
+# Get process scope directive information | |
+$directives = get_process_scope_directives(); | |
+for my $process (values %{$daemons}) { | |
+ print "\n"; | |
+ print "Process name: $process->{fname}\n"; | |
+ print "Command line: $process->{cmndline}\n"; | |
+ print "Working UID : $process->{uid}\n"; | |
+ print "Instances : $process->{instances}\n"; | |
+ | |
+ $_ = $term->readline("Would you like to monitor '$process->{fname}'? [y/N]: "); | |
+ redo unless /^\s*(y|n)?\s*$/i; | |
+ next unless /y/i; | |
+ | |
+ $str .= "# Process $process->{fname} added by psmon-config\n"; | |
+ $str .= "<Process $process->{fname}>\n"; | |
+ | |
+ for my $directive (sort keys(%{$directives})) { | |
+ (my $help = $directives->{$directive}->[1]) =~ s/\s\s+/ /g; | |
+ printf("\n%-13s%s\n",'Directive:',$directive); | |
+ print wrap('Description: ',' ',"$help\n"); | |
+ printf("%-13s%s\n",'Defaults to:',$directives->{$directive}->[0]) if $directives->{$directive}->[0]; | |
+ | |
+ my $prompt = "Specify $directive? [".($directives->{$directive}->[0] ? 'y/N' : 'Y/n')."]: "; | |
+ $_ = $term->readline($prompt); | |
+ redo unless /^\s*(y|n)?\s*$/i; | |
+ | |
+ if ($_ =~ /y/ || (!length($directives->{$directive}->[0]) && $_ !~ /n/)) { | |
+ $str .= sprintf("\t%s %s\n",$directive,get_value('Value?: ')); | |
+ } | |
+ } | |
+ | |
+ $str .= "</Process>\n\n"; | |
+} | |
+ | |
+ | |
+# Add this again for those who just do not pay attention | |
+$str .= "# You need to remove BOTH of these 'Disabled' directives before using this\n"; | |
+$str .= "# configuration file. Please make sure you have read and understood everything\n"; | |
+$str .= "# in this file before using it in a live production environment!\n"; | |
+$str .= "Disabled True\n"; | |
+ | |
+ | |
+# Print the configuration | |
+open(FH,">psmon-config.conf") || die "Unable to open file handle FH for file 'psmon-config.conf': $!"; | |
+print FH <<__TEXT__; | |
+############################################################################## | |
+# | |
+# Please read through this configuration file in detail. It will NOT function | |
+# right out of the box without any modifications. This is for good reason, | |
+# since I don't want to receive snotty emails from you or your system | |
+# administrator, being accused of killing your server or workstation. | |
+# | |
+# There is further documentation supplied with the psmon software. I suggest | |
+# that you read it thoroughly. | |
+# | |
+# - The author, Nicola Worthington | |
+# | |
+############################################################################## | |
+ | |
+__TEXT__ | |
+print FH "$str\n"; | |
+print FH <<__TEXT__; | |
+ | |
+ | |
+# The <Process *> scope is commented out by default. It should be used with | |
+# *EXTREME* care. If you do decide to use it, may I suggest that you run psmon | |
+# in 'DryRun' mode by adding the 'DryRun' directive in this configuration | |
+# file. READ THE DOCUMENTATION THOROUGHLY BEFORE ENABLING THIS FEATURE!!! | |
+ | |
+#<Process *> | |
+# PctCpu 80 | |
+# PctMem 50 | |
+#</Process> | |
+ | |
+ | |
+ | |
+# I have included a set of commonly required processes. They are all vital | |
+# services which must be running on all of my workstations and servers. It's | |
+# a pretty good guess you'll want them to always be running too. | |
+ | |
+# Secure Shell Daemon | |
+#<Process sshd> | |
+# LogLevel LOG_CRITICAL | |
+# SpawnCmd /sbin/service sshd restart | |
+# PidFile /var/run/sshd.pid | |
+# # Instances 30 | |
+# # PctCPU 90 | |
+#</Process> | |
+ | |
+# Cron Daemon | |
+#<Process crond> | |
+# spawncmd /sbin/service crond restart | |
+# pidfile /var/run/crond.pid | |
+#</Process> | |
+ | |
+# System Logger Daemon | |
+#<Process syslogd> | |
+# spawncmd /sbin/service syslog restart | |
+# pidfile /var/run/syslogd.pid | |
+#</Process> | |
+ | |
+# Internet Super Daemon | |
+#<Process xinetd> | |
+# spawncmd /sbin/service xinetd restart | |
+# pidfile /var/run/xinetd.pid | |
+#</Process> | |
+ | |
+# Remote WHO Daemon | |
+#<Process rwhod> | |
+# # rwhod is *EVIL*! There is almost never any real | |
+# # reason why you would ever want to run such pants! | |
+# killcmd /sbin/service rwhod stop | |
+# ttl 1 | |
+#</Process> | |
+ | |
+# BIND DNS Daemon | |
+#<Process named> | |
+# spawncmd /sbin/service named start | |
+# pidfile /var/run/named.pid | |
+#</Process> | |
+ | |
+# Exim SMTP Mail Daemon | |
+#<Process exim> | |
+# spawncmd /sbin/service exim restart | |
+# pidfile /var/run/exim.pid | |
+# # instamces 30 | |
+# # pctcpu 90 | |
+#</Process> | |
+ | |
+# Sendmail SMTP Mail Daemon | |
+#<Process sendmail> | |
+# spawncmd /sbin/service sendmail start | |
+# pidfile /var/run/sendmail.pid | |
+#</Process> | |
+ | |
+# Samba SMB File Sharing Daemon | |
+#<Process smbd> | |
+# spawncmd /sbin/service smbd restart | |
+# pidfile /var/run/samba/smbd.pid | |
+#</Process> | |
+#<Process nmbd> | |
+# spawncmd /sbin/service smbd restart | |
+# pidfile /var/run/samba/nmbd.pid | |
+#</Process> | |
+ | |
+# Quallcomm QPopper POP3 Daemon | |
+#<Process popper> | |
+# spawncmd /sbin/service popper restart | |
+# pidfile /var/run/popper.pid | |
+#</Process> | |
+ | |
+# Apache Group HTTP Daemon | |
+#<Process httpd> | |
+# spawncmd /sbin/service httpd restart | |
+# pidfile /var/run/httpd.pid | |
+# # instances 200 | |
+# # pctcpu 80 | |
+#</Process> | |
+ | |
+# MySQL Database | |
+#<Process mysqld> | |
+# spawncmd /sbin/service mysqld restart | |
+# killcmd /sbin/service mysqld stop | |
+# pidfile /var/run/mysqld/mysqld.pid | |
+# # pctcpu 90 | |
+# # pctmem 60 | |
+#</Process> | |
+ | |
+# NTP Time Daemon | |
+#<Process ntpd> | |
+# spawncmd /sbin/service ntpd restart | |
+#</Process> | |
+ | |
+# SMNP Daemon | |
+#<Process snmpd> | |
+# | |
+#</Process> | |
+ | |
+# ProFTPD FTP Daemon | |
+#<Process proftpd> | |
+# spawncmd /sbin/service proftpd restart | |
+# pidfile /var/run/proftpd.pid | |
+#</Processes> | |
+ | |
+ | |
+ | |
+# These are processes which run frequently on my machines, but I have had | |
+# experience of either running for too long (for whatever readon), or spawning | |
+# too many copies. | |
+# | |
+# The following is a quick table for your ease of reference: | |
+# Seconds Minutes Hours Days Weeks | |
+# 60 1 | |
+# 3600 60 1 | |
+# 43200 720 12 0.5 | |
+# 86400 1440 24 1 | |
+# 604800 10080 168 7 1 | |
+ | |
+# Kill excessive of slothenly rsync processes | |
+#<Process rsync> | |
+# ttl 43200 | |
+# instances 5 | |
+#</Process> | |
+ | |
+# Kill excessive of slothenly updatedb processes | |
+#<Process updatedb> | |
+# ttl 43200 | |
+# instances 2 | |
+#</Process> | |
+ | |
+# Kill excessive of slothenly find processes | |
+#<Process find> | |
+# ttl 86400 | |
+# instances 30 | |
+#</Process> | |
+ | |
+ | |
+ | |
+### END OF FILE | |
+ | |
+ | |
+__TEXT__ | |
+ | |
+close(FH) || warn "Unable to close file handle FH for file 'psmon-config.conf': $!"; | |
+print "\n\n"; | |
+print "Configuration file written to ./psmon-config.conf\n\n"; | |
+ | |
+ | |
+# Subroutines | |
+sub get_value { | |
+ my $prompt = shift || 'Value?: '; | |
+ | |
+ my $retval = ''; | |
+ until ($retval) { | |
+ $_ = $term->readline($prompt); | |
+ chomp; | |
+ redo unless /\S+/; | |
+ confirm: { | |
+ print "You entered: $_\n"; | |
+ my $confirm = $term->readline('Is this correct? [Y/n]: '); | |
+ redo confirm unless $confirm =~ /^\s*(y|n)?\s*$/i; | |
+ $retval = $_ if $confirm !~ /n/i; | |
+ } | |
+ } | |
+ | |
+ return $retval; | |
+} | |
+ | |
+sub read_config { | |
+ my $config_file = shift; | |
+ | |
+ unless (-f $config_file && -r $config_file) { | |
+ return undef; | |
+ } | |
+ | |
+ my $conf = new Config::General( | |
+ -ConfigFile => $config_file, | |
+ -LowerCaseNames => 1, | |
+ -UseApacheInclude => 1, | |
+ -IncludeRelative => 1, | |
+ -MergeDuplicateBlocks => 1, | |
+ -AllowMultiOptions => 1, | |
+ -MergeDuplicateOptions => 1, | |
+ -AutoTrue => 1, | |
+ ); | |
+ | |
+ return $conf->getall; | |
+} | |
+ | |
+sub get_process_scope_directives { | |
+ my $directives = { | |
+ SpawnCmd => [ ('', | |
+ 'Defines the full command line to be executed in order to respawn a dead process.') ], | |
+ | |
+ KillCmd => [ ('*Undefined*', | |
+ 'Defines the full command line to be executed in order | |
+ to gracefully shutdown or kill a rogue process. If the command | |
+ returns a boolean true exit status then it is assumed that the | |
+ command failed to execute sucessfully. If no KillCmd is specified | |
+ or the command fails, the process will be killed by sending a | |
+ SIGKILL signal with the standard kill() function.') ], | |
+ | |
+ AdminEmail => [ ('*Undefined*', | |
+ 'Defines the email address where notification emails should be sent to for | |
+ this process scope. An AdminEmail entry in the process scope will take priority | |
+ over the global AdminEmail declaration. All AdminEmail values in the | |
+ configuration file will be ignored and overridden if AdminEmail is specified as | |
+ a command line option.') ], | |
+ | |
+ PIDFile => [ ('', | |
+ 'Defines the full path and filename of a file created by | |
+ a process which contain it\'s main parent process ID.') ], | |
+ | |
+ TTL => [ ('*Undefined*', | |
+ 'Defines a maximum time to live (in seconds) of a process. | |
+ The process will be killed once it has been running longer than | |
+ this value, and it\'s process ID isn\'t contained in the defined pidfile.') ], | |
+ | |
+ PctCpu => [ ('*Undefined*', | |
+ 'Defines a maximum allowable percentage of CPU time a | |
+ process may use. The process will be killed once it\'s CPU | |
+ usage exceeds this threshold and it\'s process ID isn\'t | |
+ contained in the defined pidfile.') ], | |
+ | |
+ PctMem => [ ('*Undefined*', | |
+ 'Defines a maximum allowable percentage of total system | |
+ memory a process may use. The process will be killed once it\'s | |
+ memory usage exceeds this threshold and it\'s process ID isn\'t | |
+ contained in the defined pidfile.') ], | |
+ | |
+ Instances => [ ('*Undefined*', | |
+ 'Defines a maximum number of instances of a process which | |
+ may run. The process will be killed once there are more than | |
+ this number of occurances running, and it\'s process ID isn\'t | |
+ contained in the defined pid file.') ], | |
+ | |
+ NoEmailOnKill => [ ('False', | |
+ 'Accepts a boolean value of True or False. Surpresses | |
+ process killing notification emails for this process scope.') ], | |
+ | |
+ NoEmailOnSpawn => [ ('False', | |
+ 'Accepts a boolean value of True or False. Surpresses | |
+ process spawning notification emails for this process scope.') ], | |
+ | |
+ NoEmail => [ ('False', | |
+ 'Accepts a boolean value of True or False. Surpresses | |
+ all notification emails for this process scope.') ], | |
+ }; | |
+ return $directives; | |
+} | |
+ | |
+sub get_directives { | |
+ my $directives = { | |
+ Facility => [ ('LOG_DAEMON', | |
+ 'Defines which syslog facility to log to. Refer | |
+ to your syslogd and/or operating system documentation for a | |
+ list of valid facilities.') ], | |
+ | |
+ LogLevel => [ ('LOG_NOTICE', | |
+ 'Defines the loglevel priority that notifications | |
+ to syslog will be marked as. Refer to your operating system\'s | |
+ kernel.h documentation for a list of valid priorities.') ], | |
+ | |
+ AdminEmail => [ ('root@localhost', | |
+ 'Defines the email address where notification emails should be sent to. | |
+ This may be also be used in a Process scope which will take priority over | |
+ a global declaration. All AdminEmail entries in the configuration file | |
+ will be overridden if it is specified on the command line as an option.') ], | |
+ | |
+ NotifyEmailFrom => [ (sprintf('%s@%s',(getpwuid($EFFECTIVE_USER_ID))[0],(POSIX::uname())[1]), | |
+ 'Defines the email address that notification email should be | |
+ addresses from.') ], | |
+ | |
+ SMTPHost => [ ('localhost', | |
+ 'Defines the IP address or hostname of the SMTP | |
+ server to used to send email notifications.') ], | |
+ | |
+ DefaultEmailMethod => [ ('sendmail', | |
+ 'Defines which method should be used by default to try and send notification emails. | |
+ Legal values are "SMTP" or "sendmail".') ], | |
+ | |
+ SMTPTimeout => [ ('20', | |
+ 'Defines the timeout in seconds to be used during SMTP | |
+ connections.') ], | |
+ | |
+ SendmailCMD => [ ('', | |
+ 'Defines the sendmail command to use to send notification emails if | |
+ there is a failure with the SMTP connection to the host defined by SMTPHost. | |
+ PSMon will attempt to locate the sendmail command for you by looking in | |
+ common locations.') ], | |
+ | |
+ Frequency => [ ('60', | |
+ 'Defines the frequency (in seconds) of process table queries.') ], | |
+ | |
+ LastSafePID => [ ('100', | |
+ 'When defined, psmon will never attempt to kill a | |
+ process ID which is numerically less than or equal to the value | |
+ defined by lastsafepid. It should be noted that psmon will never | |
+ attempt to kill itself, or a process ID less than or equal to 1.') ], | |
+ | |
+ NeverKillPID => [ ('1', | |
+ 'Accepts a space delimited list of PIDs which will never | |
+ be killed.') ], | |
+ | |
+ NeverKillProcessName => [ ('kswapd kupdated mdrecoveryd pageout sched init', | |
+ 'Accepts a space | |
+ delimited list of process names which will never be killed. ') ], | |
+ | |
+ ProtectSafePIDsQuietly => [ ('Off', | |
+ 'Accepts a boolean value of On or Off. | |
+ Surpresses all notifications of preserved process IDs when | |
+ used in conjunction with the lastsafepid directive.') ], | |
+ }; | |
+ return $directives; | |
+} | |
+ | |
diff --git a/psmon-1.0.4/commit.sh b/psmon-1.0.4/commit.sh | |
deleted file mode 100755 | |
index 52a88dc..0000000 | |
--- a/psmon-1.0.4/commit.sh | |
+++ /dev/null | |
@@ -1,47 +0,0 @@ | |
-#!/bin/sh | |
-############################################################ | |
-# $Id: commit.sh,v 1.4 2003/03/14 14:25:27 nicl Exp $ | |
-# commit.sh - Update and commit changes to CVS | |
-# Copyright: (c)2002,2003 Nic Lawrence. All rights reserved. | |
-############################################################ | |
-# This file is part of psmon. | |
-# | |
-# psmon is free software; you can redistribute it and/or modify | |
-# it under the terms of the GNU General Public License as published by | |
-# the Free Software Foundation; either version 2 of the License, or | |
-# (at your option) any later version. | |
-# | |
-# psmon is distributed in the hope that it will be useful, | |
-# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
-# GNU General Public License for more details. | |
-# | |
-# You should have received a copy of the GNU General Public License | |
-# along with psmon; if not, write to the Free Software | |
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
-############################################################ | |
- | |
-if [ "`hostname`" = "nicl.tech.ensign.ftech.net" ] || [ "`hostname`" = "bacardi.tfb.net" ] | |
-then | |
- if [ $# -ge 1 ] | |
- then | |
- pod2html --css=perldoc.css psmon > psmon.html | |
- rm -f pod2htm?.x~~ | |
- pod2man psmon psmon.1 | |
- echo "This file was automatically generated from http://psmon.perlguy.org.uk/index.htm" > README | |
- echo "at `date`" >> README | |
- echo "--------------------------------------------------------------------------------" >> README | |
- echo >> README; echo >> README | |
- links -dump http://psmon.perlguy.org.uk/index.htm >> README | |
- fi | |
- cvs commit $@ | |
- cvs2cl.pl -r -t -T -P | |
- killall -9 psmon | |
- sudo ./install.sh | |
- rm -f ChangeLog.bak pod2html* | |
-else | |
- echo "You're not the author of this software, so this script is" | |
- echo "of no use to you. Please ignore or delete it. -- Thanks." | |
- exit 1 | |
-fi | |
- | |
diff --git a/psmon-1.29/etc/psmon.conf b/psmon-1.29/etc/psmon.conf | |
new file mode 100644 | |
index 0000000..5c653e8 | |
--- /dev/null | |
+++ b/psmon-1.29/etc/psmon.conf | |
@@ -0,0 +1,253 @@ | |
+############################################################################## | |
+# | |
+# Please read through this configuration file in detail. It will NOT function | |
+# right out of the box without any modifications. This is for good reason, | |
+# since I don't want to receive snotty emails from you or your system | |
+# administrator, being accused of killing your server or workstation. | |
+# | |
+# There is further documentation supplied with the psmon software. I suggest | |
+# that you read it thoroughly. | |
+# | |
+# - The author, Nicola Worthington | |
+# | |
+############################################################################## | |
+ | |
+# Generated by psmon-config, by nicolaw@lilacup.2x4b.com | |
+# Created at Fri May 6 13:45:33 2005 | |
+ | |
+# Please read through your configuration file before using it in production! | |
+Disabled True | |
+ | |
+# Defines the email address where notification emails should be sent to. | |
+# This may be also be used in a Process scope which will take priority over | |
+# a global declaration. All AdminEmail entries in the configuration file | |
+# will be overridden if it is specified on the command line as an option. | |
+# Defaults to: root@localhost | |
+AdminEmail root@localhost | |
+ | |
+# Defines which method should be used by default to try and send | |
+# notification emails. Legal values are "SMTP" or "sendmail". | |
+# Defaults to: sendmail | |
+DefaultEmailMethod sendmail | |
+ | |
+# Defines which syslog facility to log to. Refer to your syslogd and/or | |
+# operating system documentation for a list of valid facilities. | |
+# Defaults to: LOG_DAEMON | |
+Facility LOG_DAEMON | |
+ | |
+# Defines the frequency (in seconds) of process table queries. | |
+# Defaults to: 60 | |
+Frequency 60 | |
+ | |
+# When defined, psmon will never attempt to kill a process ID which is | |
+# numerically less than or equal to the value defined by lastsafepid. It | |
+# should be noted that psmon will never attempt to kill itself, or a process | |
+# ID less than or equal to 1. | |
+# Defaults to: 100 | |
+LastSafePID 100 | |
+ | |
+# Defines the loglevel priority that notifications to syslog will be marked | |
+# as. Refer to your operating system's kernel.h documentation for a list of | |
+# valid priorities. | |
+# Defaults to: LOG_NOTICE | |
+LogLevel LOG_NOTICE | |
+ | |
+# Accepts a space delimited list of PIDs which will never be killed. | |
+# Defaults to: 1 | |
+NeverKillPID 1 | |
+ | |
+# Accepts a space delimited list of process names which will never be | |
+# killed. | |
+# Defaults to: kswapd kupdated mdrecoveryd pageout sched init | |
+NeverKillProcessName kswapd kupdated mdrecoveryd pageout sched init | |
+ | |
+# Defines the email address that notification email should be addresses | |
+# from. | |
+# Defaults to: username@hostname | |
+### NotifyEmailFrom joe.bloggs@foobar.com | |
+ | |
+# Accepts a boolean value of On or Off. Surpresses all notifications of | |
+# preserved process IDs when used in conjunction with the lastsafepid | |
+# directive. | |
+# Defaults to: Off | |
+ProtectSafePIDsQuietly Off | |
+ | |
+# Defines the IP address or hostname of the SMTP server to used to send | |
+# email notifications. | |
+# Defaults to: localhost | |
+SMTPHost localhost | |
+ | |
+# Defines the timeout in seconds to be used during SMTP connections. | |
+# Defaults to: 20 | |
+SMTPTimeout 20 | |
+ | |
+# Defines the sendmail command to use to send notification emails if there | |
+# is a failure with the SMTP connection to the host defined by SMTPHost. | |
+# PSMon will attempt to locate the sendmail command for you by looking in | |
+# common locations. | |
+### SendmailCMD /usr/sbin/sendmail -t | |
+ | |
+# You need to remove BOTH of these 'Disabled' directives before using this | |
+# configuration file. Please make sure you have read and understood everything | |
+# in this file before using it in a live production environment! | |
+Disabled True | |
+ | |
+ | |
+ | |
+# The <Process *> scope is commented out by default. It should be used with | |
+# *EXTREME* care. If you do decide to use it, may I suggest that you run psmon | |
+# in 'DryRun' mode by adding the 'DryRun' directive in this configuration | |
+# file. READ THE DOCUMENTATION THOROUGHLY BEFORE ENABLING THIS FEATURE!!! | |
+ | |
+#<Process *> | |
+# PctCpu 80 | |
+# PctMem 50 | |
+#</Process> | |
+ | |
+ | |
+ | |
+# I have included a set of commonly required processes. They are all vital | |
+# services which must be running on all of my workstations and servers. It's | |
+# a pretty good guess you'll want them to always be running too. | |
+ | |
+# Secure Shell Daemon | |
+#<Process sshd> | |
+# LogLevel LOG_CRITICAL | |
+# SpawnCmd /sbin/service sshd restart | |
+# PidFile /var/run/sshd.pid | |
+# # Instances 30 | |
+# # PctCPU 90 | |
+#</Process> | |
+ | |
+# Cron Daemon | |
+#<Process crond> | |
+# spawncmd /sbin/service crond restart | |
+# pidfile /var/run/crond.pid | |
+#</Process> | |
+ | |
+# System Logger Daemon | |
+#<Process syslogd> | |
+# spawncmd /sbin/service syslog restart | |
+# pidfile /var/run/syslogd.pid | |
+#</Process> | |
+ | |
+# Internet Super Daemon | |
+#<Process xinetd> | |
+# spawncmd /sbin/service xinetd restart | |
+# pidfile /var/run/xinetd.pid | |
+#</Process> | |
+ | |
+# Remote WHO Daemon | |
+#<Process rwhod> | |
+# # rwhod is *EVIL*! There is almost never any real | |
+# # reason why you would ever want to run such pants! | |
+# killcmd /sbin/service rwhod stop | |
+# ttl 1 | |
+#</Process> | |
+ | |
+# BIND DNS Daemon | |
+#<Process named> | |
+# spawncmd /sbin/service named start | |
+# pidfile /var/run/named.pid | |
+#</Process> | |
+ | |
+# Exim SMTP Mail Daemon | |
+#<Process exim> | |
+# spawncmd /sbin/service exim restart | |
+# pidfile /var/run/exim.pid | |
+# # instamces 30 | |
+# # pctcpu 90 | |
+#</Process> | |
+ | |
+# Sendmail SMTP Mail Daemon | |
+#<Process sendmail> | |
+# spawncmd /sbin/service sendmail start | |
+# pidfile /var/run/sendmail.pid | |
+#</Process> | |
+ | |
+# Samba SMB File Sharing Daemon | |
+#<Process smbd> | |
+# spawncmd /sbin/service smbd restart | |
+# pidfile /var/run/samba/smbd.pid | |
+#</Process> | |
+#<Process nmbd> | |
+# spawncmd /sbin/service smbd restart | |
+# pidfile /var/run/samba/nmbd.pid | |
+#</Process> | |
+ | |
+# Quallcomm QPopper POP3 Daemon | |
+#<Process popper> | |
+# spawncmd /sbin/service popper restart | |
+# pidfile /var/run/popper.pid | |
+#</Process> | |
+ | |
+# Apache Group HTTP Daemon | |
+#<Process httpd> | |
+# spawncmd /sbin/service httpd restart | |
+# pidfile /var/run/httpd.pid | |
+# # instances 200 | |
+# # pctcpu 80 | |
+#</Process> | |
+ | |
+# MySQL Database | |
+#<Process mysqld> | |
+# spawncmd /sbin/service mysqld restart | |
+# killcmd /sbin/service mysqld stop | |
+# pidfile /var/run/mysqld/mysqld.pid | |
+# # pctcpu 90 | |
+# # pctmem 60 | |
+#</Process> | |
+ | |
+# NTP Time Daemon | |
+#<Process ntpd> | |
+# spawncmd /sbin/service ntpd restart | |
+#</Process> | |
+ | |
+# SMNP Daemon | |
+#<Process snmpd> | |
+# | |
+#</Process> | |
+ | |
+# ProFTPD FTP Daemon | |
+#<Process proftpd> | |
+# spawncmd /sbin/service proftpd restart | |
+# pidfile /var/run/proftpd.pid | |
+#</Processes> | |
+ | |
+ | |
+ | |
+# These are processes which run frequently on my machines, but I have had | |
+# experience of either running for too long (for whatever readon), or spawning | |
+# too many copies. | |
+# | |
+# The following is a quick table for your ease of reference: | |
+# Seconds Minutes Hours Days Weeks | |
+# 60 1 | |
+# 3600 60 1 | |
+# 43200 720 12 0.5 | |
+# 86400 1440 24 1 | |
+# 604800 10080 168 7 1 | |
+ | |
+# Kill excessive of slothenly rsync processes | |
+#<Process rsync> | |
+# ttl 43200 | |
+# instances 5 | |
+#</Process> | |
+ | |
+# Kill excessive of slothenly updatedb processes | |
+#<Process updatedb> | |
+# ttl 43200 | |
+# instances 2 | |
+#</Process> | |
+ | |
+# Kill excessive of slothenly find processes | |
+#<Process find> | |
+# ttl 86400 | |
+# instances 30 | |
+#</Process> | |
+ | |
+ | |
+ | |
+### END OF FILE | |
+ | |
+ | |
diff --git a/psmon-1.0.4/install.sh b/psmon-1.0.4/install.sh | |
deleted file mode 100755 | |
index ef7798e..0000000 | |
--- a/psmon-1.0.4/install.sh | |
+++ /dev/null | |
@@ -1,117 +0,0 @@ | |
-#!/bin/sh | |
-############################################################ | |
-# $Id: install.sh,v 1.6 2003/03/14 12:28:42 nicl Exp $ | |
-# install.sh - Installation script for psmon | |
-# Copyright: (c)2002,2003 Nic Lawrence. All rights reserved. | |
-############################################################ | |
-# This file is part of psmon. | |
-# | |
-# psmon is free software; you can redistribute it and/or modify | |
-# it under the terms of the GNU General Public License as published by | |
-# the Free Software Foundation; either version 2 of the License, or | |
-# (at your option) any later version. | |
-# | |
-# psmon is distributed in the hope that it will be useful, | |
-# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
-# GNU General Public License for more details. | |
-# | |
-# You should have received a copy of the GNU General Public License | |
-# along with psmon; if not, write to the Free Software | |
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
-############################################################ | |
- | |
-# Check we have all the right perl modules installed. Try and | |
-# install them from the tarballs provided if necessary. | |
-for m in Config-General Proc-ProcessTable Unix-Syslog Getopt-Long | |
-do | |
- echo -n "Checking for $m ... " | |
- if perl -e '($m = shift) =~ s/\-/::/g; eval("use $m;"); exit 1 if $@;' $m | |
- then | |
- echo "found" | |
- else | |
- echo "missing" | |
- tar -zxf $m-*.tar.gz | |
- if cd $m-* | |
- then | |
- perl Makefile.PL && make && make test && make install | |
- cd .. | |
- fi | |
- fi | |
-done | |
- | |
-# Install psmon | |
-if [ -e psmon ] | |
-then | |
- # Remove any old version of psmon | |
- if which psmon > /dev/null 2>&1 | |
- then | |
- oldpsmon=`which psmon` | |
- bakpsmon=`date +"$oldpsmon-%Y%m%d%H%M%S"` | |
- echo -n "Moving old psmon $oldpsmon to $bakpsmon ... " | |
- mv $oldpsmon `date +"$oldpsmon-%Y%m%d%H%M%S"` | |
- if [ -e $bakpsmon ]; then echo "done"; else echo "failed"; fi | |
- fi | |
- | |
- # Install the new psmon script | |
- echo -n "Installing psmon ... " | |
- cp psmon /sbin | |
- if [ -e /sbin/psmon ]; then echo "done"; else echo "failed"; fi | |
- | |
- # If we removed an old version, symlink it to the new version | |
- if [ "X$oldpsmon" != "X" ] && [ "$oldpsmon" != "/sbin/psmon" ] | |
- then | |
- echo -n "Symlinking old psmon $oldpsmon to /sbin/psmon ... " | |
- ln -s /sbin/psmon $oldpsmon | |
- if [ -e $oldpsmon ]; then echo "done"; else echo "failed"; fi | |
- fi | |
- | |
- # Install psmon.conf | |
- if ! [ -e /etc/psmon.conf ] | |
- then | |
- if [ -e psmon.conf ] | |
- then | |
- echo -n "Installing psmon.conf ... " | |
- cp psmon.conf /etc | |
- if [ -e /etc/psmon.conf ]; then echo "done"; else echo "failed"; fi | |
- else | |
- echo -n "Could not find psmon.conf; skipped psmon.conf installation" | |
- fi | |
- else | |
- echo "/etc/psmon.conf already exists; skipped psmon.conf installation" | |
- fi | |
- | |
- # Generate HTML documentation | |
- if which pod2html > /dev/null 2>&1 | |
- then | |
- echo -n "Generating HTML documentation psmon.html ... " | |
- pod2html --css=perldoc.css psmon > psmon.html | |
- if [ -e psmon.html ]; then echo "done"; else echo "failed"; fi | |
- fi | |
- | |
- # Generate and install man pages | |
- if which pod2man > /dev/null 2>&1 | |
- then | |
- mandir=/usr/man/man1 | |
- if ! [ -d $mandir ] && [ -d /usr/share/man/man1 ];then | |
- mandir=/usr/share/man/man1 | |
- fi | |
- #if which gzip > /dev/null 2>&1 | |
- #then | |
- # echo -n "Installing manual psmon.1.gz ... " | |
- # pod2man psmon | gzip > $mandir/psmon.1.gz | |
- # if [ -e $mandir/psmon.1.gz ]; then echo "done"; else echo "failed"; fi | |
- #else | |
- echo -n "Installing manual psmon.1 ... " | |
- pod2man psmon > $mandir/psmon.1 | |
- if [ -e $mandir/psmon.1 ]; then echo "done"; else echo "failed"; fi | |
- #fi | |
- else | |
- echo "Could not find pod2man; skipped manual installation" | |
- fi | |
-else | |
- echo "Could not find psmon; skipped psmon installation" | |
-fi | |
- | |
- | |
- | |
diff --git a/psmon-1.0.4/libnet-1.12.tar.gz b/psmon-1.0.4/libnet-1.12.tar.gz | |
deleted file mode 100644 | |
index c633f73d163af99f82c378f712c816d3bca89d2c..0000000000000000000000000000000000000000 | |
GIT binary patch | |
literal 0 | |
HcmV?d00001 | |
literal 65841 | |
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�kN>o2L`X<Vj!S-5u7G^S@810`G1e0jql_RKV|U | |
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 | |
diff --git a/psmon-1.0.4/perldoc.css b/psmon-1.0.4/perldoc.css | |
deleted file mode 100644 | |
index 993d4ff..0000000 | |
--- a/psmon-1.0.4/perldoc.css | |
+++ /dev/null | |
@@ -1,201 +0,0 @@ | |
-/* | |
-############################################################ | |
-# $Id: perldoc.css,v 1.2 2003/03/14 12:28:42 nicl Exp $ | |
-# perldoc.css - Perl Documentation Cascading Style Sheet | |
-############################################################ | |
-# This file is part of psmon. | |
-# | |
-# psmon is free software; you can redistribute it and/or modify | |
-# it under the terms of the GNU General Public License as published by | |
-# the Free Software Foundation; either version 2 of the License, or | |
-# (at your option) any later version. | |
-# | |
-# psmon is distributed in the hope that it will be useful, | |
-# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
-# GNU General Public License for more details. | |
-# | |
-# You should have received a copy of the GNU General Public License | |
-# along with psmon; if not, write to the Free Software | |
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
-############################################################ | |
-*/ | |
- | |
-BODY { | |
- font-family: Arial,Helvetica; | |
-} | |
- | |
-BLOCKQUOTE { margin: 10pt; } | |
- | |
-H1,A { color: #336699; } | |
- | |
-/*** Top menu style ****/ | |
-.mmenuon { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #ff6600; font-size: 10pt; | |
- } | |
-.mmenuoff { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #ffffff; font-size: 10pt; | |
-} | |
-.cpyright { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #ffffff; font-size: xx-small; | |
-} | |
-.cpyrightText { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #ffffff; font-size: xx-small; | |
-} | |
-.sections { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: 11pt; | |
-} | |
-.dsections { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: 12pt; | |
-} | |
-.slink { | |
- font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; | |
- color: #336699; font-size: 9pt; | |
-} | |
- | |
-.slink2 { font-family: Arial,Helvetica; text-decoration: none; color: #336699; } | |
- | |
-.maintitle { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: 18pt; | |
-} | |
-.dblArrow { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: small; | |
-} | |
-.menuSec { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: small; | |
-} | |
- | |
-.newstext { | |
- font-family: Arial,Helvetica; font-size: small; | |
-} | |
- | |
-.linkmenu { | |
- font-family: Arial,Helvetica; color: #000000; font-weight: bold; | |
- text-decoration: none; | |
-} | |
- | |
-P { | |
- font-family: Arial,Helvetica; | |
-} | |
- | |
-PRE { | |
- border: 1px solid black; | |
- background: #e5e5ee; | |
- padding: 5px 5px 5px 5px; | |
- font-size: 10pt; | |
-} | |
-.quote { | |
- font-family: Times; text-decoration: none; | |
- color: #000000; font-size: 9pt; font-style: italic; | |
-} | |
-.smstd { font-family: Arial,Helvetica; color: #000000; font-size: x-small; } | |
-.std { font-family: Arial,Helvetica; color: #000000; } | |
-.meerkatTitle { | |
- font-family: sans-serif; font-size: x-small; color: black; } | |
- | |
-.meerkatDescription { font-family: sans-serif; font-size: 10pt; color: black } | |
-.meerkatCategory { | |
- font-family: sans-serif; font-size: 9pt; font-weight: bold; font-style: italic; | |
- color: brown; } | |
-.meerkatChannel { | |
- font-family: sans-serif; font-size: 9pt; font-style: italic; color: brown; } | |
-.meerkatDate { font-family: sans-serif; font-size: xx-small; color: #336699; } | |
- | |
-.tocTitle { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #333333; font-size: 10pt; | |
-} | |
- | |
-.toc-item { | |
- font-family: Arial,Helvetica; font-weight: bold; | |
- color: #336699; font-size: 10pt; text-decoration: underline; | |
-} | |
- | |
-.perlVersion { | |
- font-family: Arial,Helvetica; font-weight: bold; | |
- color: #336699; font-size: 10pt; text-decoration: none; | |
-} | |
- | |
-.docTitle { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #000000; font-size: 10pt; | |
-} | |
-.dotDot { | |
- font-family: Arial,Helvetica; font-weight: bold; | |
- color: #000000; font-size: 9pt; | |
-} | |
- | |
-.docSec { | |
- font-family: Arial,Helvetica; font-weight: normal; | |
- color: #333333; font-size: 9pt; | |
-} | |
-.docVersion { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: 10pt; | |
-} | |
- | |
-.docSecs-on { | |
- font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; | |
- color: #ff0000; font-size: 10pt; | |
-} | |
-.docSecs-off { | |
- font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; | |
- color: #333333; font-size: 10pt; | |
-} | |
- | |
-h2 { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: medium; | |
-} | |
-h1 { | |
- font-family: Verdana,Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: large; | |
-} | |
- | |
-DL { | |
- font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; | |
- color: #333333; font-size: 10pt; | |
-} | |
- | |
-UL > LI > A { | |
- font-family: Arial,Helvetica; font-weight: bold; | |
- color: #336699; font-size: 10pt; | |
-} | |
- | |
-.moduleInfo { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #333333; font-size: 11pt; | |
-} | |
- | |
-.moduleInfoSec { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: 10pt; | |
-} | |
- | |
-.moduleInfoVal { | |
- font-family: Arial,Helvetica; font-weight: normal; text-decoration: underline; | |
- color: #000000; font-size: 10pt; | |
-} | |
- | |
-.cpanNavTitle { | |
- font-family: Arial,Helvetica; font-weight: bold; | |
- color: #ffffff; font-size: 10pt; | |
-} | |
-.cpanNavLetter { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #333333; font-size: 9pt; | |
-} | |
-.cpanCat { | |
- font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
- color: #336699; font-size: 9pt; | |
-} | |
- | |
diff --git a/psmon-1.0.4/psmon b/psmon-1.0.4/psmon | |
deleted file mode 100755 | |
index dbd8c90..0000000 | |
--- a/psmon-1.0.4/psmon | |
+++ /dev/null | |
@@ -1,1390 +0,0 @@ | |
-#!/usr/bin/perl -w | |
-############################################################ | |
-# $Id: psmon,v 1.57 2003/03/25 13:32:42 nicl Exp $ | |
-# psmon - Process Table Monitor Script | |
-# Copyright: (c)2002,2003 Nic Lawrence. All rights reserved. | |
-############################################################ | |
-# This file is part of psmon. | |
-# | |
-# psmon is free software; you can redistribute it and/or modify | |
-# it under the terms of the GNU General Public License as published by | |
-# the Free Software Foundation; either version 2 of the License, or | |
-# (at your option) any later version. | |
-# | |
-# psmon is distributed in the hope that it will be useful, | |
-# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
-# GNU General Public License for more details. | |
-# | |
-# You should have received a copy of the GNU General Public License | |
-# along with psmon; if not, write to the Free Software | |
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
-############################################################ | |
- | |
-=pod | |
- | |
-=head1 NAME | |
- | |
-psmon - Process Table Monitoring Script | |
- | |
-=head1 VERSION | |
- | |
-$Id: psmon,v 1.57 2003/03/25 13:32:42 nicl Exp $ | |
- | |
-=head1 SYNOPSIS | |
- | |
-Single user account crontab operation. | |
- | |
- # DO NOT EDIT THIS FILE - edit the master and reinstall. | |
- # (/tmp/crontab.28945 installed on Wed Jan 8 16:29:24 2003) | |
- # (Cron version -- $Id: psmon,v 1.57 2003/03/25 13:32:42 nicl Exp $) | |
- MAILTO="nicl@perlguy.org.uk" | |
- USER=nicl | |
- | |
- */5 * * * * /sbin/psmon --daemon --cron --conf=~/etc/psmon.conf --user=$USER --adminemail=nicl@perlguy.org.uk | |
- | |
-Regular system-wide call from cron: | |
- | |
- */5 * * * * /sbin/psmon --daemon --cron | |
- | |
-Only check processes during working office hours: | |
- | |
- * 9-17 * * * /sbin/psmon | |
- | |
-Command line syntax. | |
- | |
- [nicl@nicl]$ psmon --help | |
- Syntax: psmon [--conf=filename] [--daemon] [--cron] [--user=user] | |
- [--adminemail=emailaddress] [--dryrun] [--help] [--version] | |
- --help Display this help | |
- --version Display full version information | |
- --dryrun Dryrun (do not actually kill or spawn and processes) | |
- --daemon Spawn in to background daemon | |
- --cron Disables 'already running' errors with the --daemon option | |
- --conf=str Specify alternative config filename | |
- --user=str Only scan the process table for processes running as str | |
- --adminemail=str Force all notification emails to be sent to str | |
- | |
-=head1 DESCRIPTION | |
- | |
-This script monitors the process table using Proc::ProcessTable, and | |
-will respawn or kill processes based on a set of rules defined in an | |
-Apache style configuration file. | |
- | |
-Processes will be respawned if a spawn command is defined for a process, | |
-and no occurances of that process are running. If the --user command line | |
-option is specified, then the process will only be spawned if no instances | |
-are running as the specified userid. | |
- | |
-Processes can be killed off if they have been running for too long, | |
-use too much CPU or memory resources, or have too many concurrent | |
-versions running. Exceptions can be made to kill rulesets using the | |
-I<pidfile> and I<lastsafepid> directives. | |
- | |
-If a PID file is declared for a process, psmon will never kill the | |
-process ID that is contained within the pid file. This is useful if for | |
-example, you have a script which spawns hundreds of child processes | |
-which you may need to automatically kill, but you do not want to kill | |
-the parent process. | |
- | |
-Any actions performed will be logged to the DAEMON syslog facility by default. | |
-There is support to optionally also send notifications emails to an | |
-administrator on a global or pre-rule basis. | |
- | |
-=head1 OPERATION | |
- | |
-=over 4 | |
- | |
-=item --dryrun | |
- | |
-Execute a dry-run (do not actually kill or spawn and processes). | |
- | |
-=item --conf=I<filename> | |
- | |
-Specify alternative config filename. | |
- | |
-=item --daemon | |
- | |
-Spawn in to background daemon. | |
- | |
-=item --cron | |
- | |
-Disables already running warnings when trying to launch as another daemon. | |
- | |
-=item --user=I<user> | |
- | |
-Only scan the process table for processes running under this username. | |
- | |
-=item --adminemail=I<emailaddress> | |
- | |
-Force all notification emails to be sent to this email address. | |
- | |
-=back | |
- | |
-=head1 INSTALLATION | |
- | |
-In addition to Perl 5.005_03 or higher, the following Perl modules are | |
-required: | |
- | |
- Getopt::Long | |
- Config::General | |
- POSIX | |
- Proc::ProcessTable | |
- Net::SMTP | |
- Unix::Syslog | |
- | |
-The POSIX module is usually supplied with Perl as standard, as is | |
-Getopt::Long. All these modules can be obtained from CPAN. Visit | |
-http://search.span.org and http://www.cpan.org for further details. | |
-For the lazy people reading this, you can try the | |
-following command to install these modules: | |
- | |
- for m in Getopt::Long Config::General POSIX Proc::ProcessTable \ | |
- Net::SMTP Unix::Syslog;do perl -MCPAN -e"install $m";done | |
- | |
-Alternatively you can run the install.sh script which comes in the | |
-distribution tarball. It will attempt to install the right modules, | |
-install the script and configuration file, and generate UNIX man page | |
-documentation. | |
- | |
-By default psmon will look for its runtime configuration in /etc/psmon.conf, | |
-although this can be defined as otherwise from the command line. For system | |
-wide installations it is reccomended that you install your psmon in to the | |
-default location. | |
- | |
-=cut | |
- | |
- | |
- | |
-BEGIN { | |
- use strict; | |
- sub try_to_load { | |
- my %self = @_; | |
- my $failure = ''; | |
- while (my ($module,$args) = each %self) { | |
- eval("use $module $args;"); | |
- $failure .= "Fatal error while trying to load Perl module '$module'\n" if $@; | |
- } | |
- (warn $failure) && exit 8 if $failure; | |
- } | |
- | |
- try_to_load( 'English' => '', | |
- 'Getopt::Long' => '', | |
- 'Config::General' => '', | |
- 'POSIX' => 'qw(uname getcwd)', | |
- 'Net::SMTP' => '', | |
- 'Unix::Syslog' => 'qw(:subs :macros)', | |
- 'Proc::ProcessTable' => '', ); | |
-} | |
- | |
-# Define constants | |
-use constant DEBUG => 1; # This should be reset back to 0 for public releases | |
-use constant PREFIX => ''; # You may want to set this to /home/joeb or something | |
-use constant HOSTNAME => (POSIX::uname())[1]; | |
- | |
-# Declare global package variables | |
-use subs qw(report loglevel logfacility log alert); | |
-use vars qw($VERSION $SELF %O %C); # I want to move %O, and %C out of global space | |
- | |
-# These English variables and globals are okay to stay | |
-$WARNING = 1; | |
-$OUTPUT_AUTOFLUSH = 1; | |
-$ENV{PATH} = '/bin:/usr/bin:/usr/local/bin'; | |
-($SELF = $PROGRAM_NAME) =~ s|^.*/||; | |
-$VERSION = '$Id: psmon,v 1.57 2003/03/25 13:32:42 nicl Exp $'; | |
- | |
-# Get command line options | |
-%O = ( conf => PREFIX.'/etc/psmon.conf', | |
- default_conf => PREFIX.'/etc/psmon.conf' ); | |
-GetOptions(\%O, 'help', 'version', | |
- 'daemon', 'cron', 'dryrun', | |
- 'conf=s', 'user=s', 'adminemail=s' ); | |
- | |
-# Display help or version info and exit if required | |
-display_help(0) if exists $O{help}; | |
-display_version(0) if exists $O{version}; | |
- | |
-# Open syslog with PERROR (output to terminal) | |
-openlog $SELF, LOG_PID | LOG_PERROR, logfacility; | |
- | |
-# Bork if we've been told to query for an invalid user | |
-if (exists $O{user} && (my $name = $O{user})) { $O{user} = scalar getpwnam($O{user}) || ''; | |
- unless ($O{user}) { | |
- log LOG_CRIT, "Invalid user specified: '$name'"; | |
- exit 2; | |
- } | |
-} | |
- | |
- | |
- | |
- | |
-=pod | |
- | |
-=head1 CONFIGURATION | |
- | |
-The default configuration file location is /etc/psmon.conf. A different | |
-configuration file can be declared from the command line. | |
- | |
-Syntax of the configuration file is based upon that which is used by | |
-Apache. Each process to be monitored is declared with a Process scope | |
-directive like this example which monitors the OpenSSH daemon: | |
- | |
- <Process sshd> | |
- spawncmd /sbin/service sshd start | |
- pidfile /var/run/sshd.pid | |
- instances 50 | |
- pctcpu 90 | |
- </Process> | |
- | |
-There is a special I<*> process scope which applies to I<all> running | |
-processes. This special scope should be used with extreme care. It does | |
-not support the use of the I<spawncmd>, I<pidfile>, I<instances> or I<ttl> | |
-directivers. A typical example of this scope might be as follows: | |
- | |
- <Process *> | |
- pctcpu 95 | |
- pctmem 80 | |
- </Process> | |
- | |
-Global directives which are not specific to any one process should be placed | |
-outside of any Process scopes. | |
- | |
-=head2 DIRECTIVES | |
- | |
-=over 4 | |
- | |
-=item Facility | |
- | |
-Defines which syslog facility to log to. Valid options are as follows; | |
-LOG_KERN, LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_SYSLOG, LOG_LPR, | |
-LOG_NEWS, LOG_UUCP, LOG_CRON, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, | |
-LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6 and LOG_LOCAL7. Defaults | |
-to LOG_DAEMON. | |
- | |
-=item LogLevel | |
- | |
-Defines the loglevel priority that notifications to syslog will be | |
-marked as. Valid options are as follows; LOG_EMERG, LOG_ALERT, LOG_CRIT, | |
-LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO and LOG_DEBUG. The log level | |
-used by a notification for any failed action will automatically be | |
-raised to the next level in order to highlight the failure. May be also be used | |
-in a Process scope which will take priority over a global declaration. | |
-Defaults to LOG_NOTICE. | |
- | |
-=item KillLogLevel (previously KillPIDLogLevel) | |
- | |
-The same as the loglevel directive, but only applies to process kill actions. | |
-Takes priority over the loglevel directive. May be also be used in a | |
-Process scope which will take priority over a global declaration. | |
-Undefined by default. | |
- | |
-=item SpawnLogLevel | |
- | |
-The same as the loglevel directive, but only applies to process spawn actions. | |
-Takes priority over the loglevel directive. May be also be used in a | |
-Process scope which will take priority over a global declaration. | |
-Undefined by default. | |
- | |
-=item AdminEmail | |
- | |
-Defines the email address where notification emails should be sent to. | |
-May be also be used in a Process scope which will take priority over a | |
-global declaration. Defaults to root@localhost. | |
- | |
-=item NotifyEmailFrom | |
- | |
-Defines the email address that notification email should be addresses | |
-from. Defaults to <username>@I<hostname>. | |
- | |
-=item Frequency | |
- | |
-Defines the frequency of process table queries. Defaults to 60 seconds. | |
- | |
-=item LastSafePID | |
- | |
-When defined, psmon will never attempt to kill a process ID which is | |
-numerically less than or equal to the value defined by lastsafepid. It | |
-should be noted that psmon will never attempt to kill itself, or a process ID | |
-less than or equal to 1. Defaults to 100. | |
- | |
-=item ProtectSafePIDsQuietly | |
- | |
-Accepts a boolean value of On or Off. Surpresses all notifications of | |
-preserved process IDs when used in conjunction with the I<lastsafepid> | |
-directive. Defaults to Off. | |
- | |
-=item SMTPHost | |
- | |
-Defines the IP address or hostname of the SMTP server to used to send | |
-email notifications. Defaults to localhost. | |
- | |
-=item SMTPTimeout | |
- | |
-Defines the timeout in seconds to be used during SMTP connections. | |
-Defaults to 20 seconds. | |
- | |
-=item SendmailCmd | |
- | |
-Defines the sendmail command to use to send notification emails if there | |
-is a failure with the SMTP connection to the host defined by smtphost. | |
-Defaults to '/usr/sbin/sendmail -t'. | |
- | |
-=item Dryrun | |
- | |
-Forces this psmon to as if the --dryrun command line switch had specified. | |
-This is useful if you want to force a specific configuration file to only | |
-report and never actually take any automated action. | |
- | |
-=item NotifyDetail | |
- | |
-Defines the verbosity of notification emails which are sent. Can be set | |
-to 'Simple', 'Verbose' or 'Debug'. Defaults to 'Verbose'. This function | |
-will be removed soon. It is unnecessary bloat and is not very portable. | |
- | |
-=back | |
- | |
-=head2 PROCESS SCOPE DIRECTIVES | |
- | |
-=over 4 | |
- | |
-=item SpawnCmd | |
- | |
-Defines the full command line to be executed in order to respawn a dead | |
-process. | |
- | |
-=item KillCmd | |
- | |
-Defines the full command line to be executed in order to gracefully | |
-shutdown or kill a rogue process. If the command returns a boolean true | |
-exit status then it is assumed that the command failed to execute | |
-sucessfully. If no KillCmd is specified or the command fails, the | |
-process will be killed by sending a SIGKILL signal with the standard | |
-kill() function. Undefined by default. | |
- | |
-=item PIDFile | |
- | |
-Defines the full path and filename of a file created by a process which | |
-contain it's main parent process ID. | |
- | |
-=item TTL | |
- | |
-Defines a maximum time to live (in seconds) of a process. The process | |
-will be killed once it has been running longer than this value, and | |
-it's process ID isn't contained in the defined pidfile. | |
- | |
-=item PctCpu | |
- | |
-Defines a maximum allowable percentage of CPU time a process may use. | |
-The process will be killed once it's CPU usage exceeds this threshold | |
-and it's process ID isn't contained in the defined pidfile. | |
- | |
-=item PctMem | |
- | |
-Defines a maximum allowable percentage of total system memory a process | |
-may use. The process will be killed once it's memory usage exceeds this | |
-threshold and it's process ID isn't contained in the defined pidfile. | |
- | |
-=item Instances | |
- | |
-Defines a maximum number of instances of a process which may run. The | |
-process will be killed once there are more than this number of occurances | |
-running, and it's process ID isn't contained in the defined pid file. | |
- | |
-=item NoEmailOnKill | |
- | |
-Accepts a boolean value of True or False. Surpresses process killing | |
-notification emails for this process scope. Defaults to False. | |
- | |
-=item NoEmailOnSpawn | |
- | |
-Accepts a boolean value of True or False. Surpresses process spawning | |
-notification emails for this process scope. Defaults to False. | |
- | |
-=item NoEmail | |
- | |
-Accepts a boolean value of True or False. Surpresses all notification | |
-emails for this process scope. Defaults to False. | |
- | |
-=item NeverKillPID | |
- | |
-Accepts a space delimited list of PIDs which will never be killed. | |
-Defaults to 1. | |
- | |
-=item NeverKillProcessName | |
- | |
-Accepts a space deliomited list of process names which will never be | |
-killed. Defaults to 'kswapd kupdated mdrecoveryd'. | |
- | |
-=back | |
- | |
-=head2 EXAMPLES | |
- | |
- <Process syslogd> | |
- spawncmd /sbin/service syslogd restart | |
- pidfile /var/run/syslogd.pid | |
- instances 1 | |
- pctcpu 70 | |
- pctmem 30 | |
- </Process> | |
- | |
-Syslog is a good example of a process which can get a little full | |
-of itself under certian circumstances, and excessively hog CPU and | |
-memory. Here we will kill off syslogd processes if it exceeds 70% | |
-CPU or 30% memory utilization. | |
- | |
-Older running copies of syslogd will be killed if they are running, | |
-while leaving the most recently spawned copy which will be listed in | |
-the PID file defined. | |
- | |
- <Process httpd> | |
- spawncmd /sbin/service httpd restart | |
- pidfile /var/run/httpd.pid | |
- loglevel critical | |
- adminemail pager@noc.company.com | |
- </Process> | |
- | |
-Here we are monitoring Apache to ensure that it is restarted if | |
-it dies. The pidfile directive in this example is actually | |
-redundant because we have not defined any rule where we should | |
-consider killing any httpd processes. | |
- | |
-All notifications relating to this process will be logged with the | |
-syslog priority of critical (LOG_CRIT), and all emailed to | |
-pager@noc.company.com which could typically forward to a pager. | |
- | |
-Any failed attempts to kill or restart a process will automatically | |
-be logged as a syslog priority one level higher than that specified. | |
-If a restart of Apache were to fail in this example, a wall | |
-notification would be broadcast to all interactive terminals | |
-connected to the machine, since the next log priority up from | |
-LOG_CRIT is LOG_EMERG. | |
- | |
- <Process find> | |
- noemail True | |
- ttl 3600 | |
- </Process> | |
- | |
-Kill old find processes which have been running for over an hour. | |
-Do not send an email notification since it's not too important. | |
- | |
-=cut | |
- | |
- | |
- | |
- | |
-# Read the config file and setup signal handlers | |
-%C = read_config($O{conf}); | |
-$O{dryrun} = 1 if $C{dryrun}; | |
-if ($C{disabled}) { | |
- log LOG_CRIT, "Your configuration file '$O{conf}' is disabled. Remove the 'Disabled True' directive from the file."; | |
- exit 3; | |
-} | |
- | |
- | |
- | |
-=pod | |
- | |
-=head1 SIGNALS | |
- | |
-=over 4 | |
- | |
-=item HUP | |
- | |
-Forces an immediate reload of the configuration file. You should | |
-send the HUP signal when you are running psmon as a background | |
-daemon and have altered the psmon.conf file. | |
- | |
-=item USR1 | |
- | |
-Forces an immediate scan of the process table. | |
- | |
-=back | |
- | |
-=head1 EXIT CODES | |
- | |
-=over 4 | |
- | |
-=item Value 0: Exited gracefully | |
- | |
-The program exited gracefully. | |
- | |
-=item Value 2: Failure to lookup UID for username | |
- | |
-The username specified by the --user command line option did not resolve to a valid | |
-UID. | |
- | |
-=item Value 3: Configuration file is disabled | |
- | |
-The configuration file is disabled. (It contains an active 'Disabled' directive). | |
- | |
-=item Value 4: Configuration file does not exist | |
- | |
-The specified configuration file, (default or user specified) does not exist. | |
- | |
-=item Value 5: Unable to open PID file handle | |
- | |
-Failed to open a read-only file handle for the runtime PID file. | |
- | |
-=item Value 6: Failed to fork | |
- | |
-An error occured while attempting to fork the child background daemon process. | |
- | |
-=item Value 7: Unable to open PID file handle | |
- | |
-Failed to open a write file handle for the runtime PID file. | |
- | |
-=item Value 8: Failure to load Perl module | |
- | |
-One or more Perl module could not be loaded. This usually happens when one of the | |
-required Perl modules which psmon depends upon is not installed or could not be located | |
-in the Perl LIB search path. | |
- | |
-=back | |
- | |
-=head1 PERFORMANCE | |
- | |
-psmon is not especially fast. Much of it's time is spent reading the process table. | |
-If the process table is particularly large this can take a number of seconds. | |
-Although is rarely a major problem on todays speedy machines, I have run a few tests | |
-so you take look at the times and decide if you can afford the wait. | |
- | |
- CPU OS Open Files/Procs 1m Load Real Time | |
- PIII 1.1G Mandrake 9.0 10148 / 267 0.01 0m0.430s | |
- PIII 1.2G Mandrake 9.0 16714 / 304 0.44 0m0.640s | |
- Celeron 500 Red Hat 6.1 1780 / 81 1.27 0m0.880s | |
- PII 450 Red Hat 6.0 300 / 23 0.01 0m1.050s | |
- 2x Xeon 1.8G Mandrake 9.0 90530 / 750 0.38 0m1.130s | |
- Celeron 500 Red Hat 6.1 1517 / 77 1.00 0m1.450s | |
- PIII 866 Red Hat 8.0 3769 / 76 0.63 0m1.662s | |
- PIII 750 Red Hat 6.2 754 / 35 3.50 0m2.170s | |
- | |
-(Figures are accurate as of release 1.0.3). | |
- | |
-These production machines were running the latest patched stock distribution kernels. | |
-I have listed the total number of open file descriptors, processes running and 1 minute | |
-load average to give you a slightly better context of the performance. | |
- | |
-=cut | |
- | |
-# Run a single check | |
-unless (exists $O{daemon}) { | |
- # Reopen syslog without PERROR (no output to terminal) | |
- closelog; | |
- openlog $SELF, LOG_PID, logfacility $C{facility}; | |
- | |
- # Run a single check | |
- check_processtable(exists $O{user} ? $O{user} : ''); | |
- | |
-# Run as a daemon | |
-} else { | |
- # Read the config file and setup signal handlers | |
- $SIG{'HUP'} = sub { | |
- log LOG_NOTICE, 'Recieved SIGHUP; reloading configuration'; | |
- %C = read_config($O{conf}); | |
- }; | |
- $SIG{'USR1'} = sub { | |
- log LOG_NOTICE, 'Recieved SIGUSR1; checking process table immediately'; | |
- check_processtable(exists $O{user} ? $O{user} : ''); | |
- }; | |
- | |
- # Figure out the PID file name | |
- my ($x,$y) = (POSIX::getcwd.$O{conf},0); | |
- for (0..length($x)-1) { $y += ord substr($x,$_,1); } | |
- my $pidfile = sprintf("%s/var/run/%s%s.pid", PREFIX, | |
- $SELF,$O{conf} eq $O{default_conf} | |
- ? '' : ".$y" | |
- ); | |
- | |
- #if (DEBUG) { | |
- # print "\$O{conf} = $O{conf}\n"; | |
- # print "\$O{default_conf} = $O{default_conf}\n"; | |
- # print "\$pidfile = $pidfile\n"; | |
- #} | |
- | |
- # Launch in to the background | |
- daemonize($pidfile); | |
- | |
- # Reopen syslog without PERROR (no output to terminal) | |
- closelog; | |
- openlog $SELF, LOG_PID, logfacility $C{facility}; | |
- | |
- # Die if you remove the runtime PID file | |
- while (-f $pidfile) { | |
- check_processtable(exists $O{user} ? $O{user} : ''); | |
- sleep $C{frequency}; | |
- } | |
-} | |
- | |
-# Finish | |
-log LOG_NOTICE, "Terminating.\n"; | |
-closelog; | |
-exit; | |
- | |
- | |
- | |
- | |
- | |
-######################################## | |
-# User subroutines | |
- | |
-=pod | |
- | |
-=head1 SUBROUTINES | |
- | |
-=over 4 | |
- | |
-=item check_processtable() | |
- | |
-Reads the current process table, checks and then executes any appropriate | |
-action to be taken. Does not accept any paramaters. | |
- | |
-=cut | |
- | |
-sub check_processtable { | |
- my $uid = shift; | |
- | |
- # Slurp in the process table | |
- my %proc; | |
- my $t = new Proc::ProcessTable; | |
- foreach my $p (@{$t->table}) { | |
- ## Be sad and use the process table to find out if we have a | |
- ## tty attached to this process | |
- #if ($p->{pid} == $$ && $p->{ttynum}) { | |
- # %A = ( | |
- # MOVE_TO_COL => "\033[60G", | |
- # SUCCESS => "\033[1;32m", | |
- # FAILURE => "\033[1;31m", | |
- # WARNING => "\033[1;33m", | |
- # NORMAL => "\033[0;39m" | |
- # ); | |
- #} | |
- | |
- # Only grab information on processes we have rules for | |
- next unless $C{process}->{'*'} || $C{process}->{$p->{fname}}; | |
- | |
- # Skip processes that don't belong to the specified UID if applicable | |
- next if $uid && $p->{uid} != $uid; | |
- | |
- my $i = !exists $proc{$p->{fname}} ? 0 : @{$proc{$p->{fname}}}; | |
- $proc{$p->{fname}}->[$i] = { | |
- pid => $p->{pid}, | |
- ppid => $p->{ppid}, | |
- fname => $p->{fname}, | |
- tty => $p->{ttynum}, | |
- start => $p->{start}, | |
- pctcpu => isnumeric($p->{pctcpu}) || 0, | |
- pctmem => isnumeric($p->{pctmem}) || 0, | |
- }; | |
- } | |
- undef $t; | |
- | |
- #if (DEBUG) { | |
- # use Data::Dumper; | |
- # print Dumper(\%proc); | |
- #} | |
- | |
- # Build a list of bad naughty processes | |
- my %slay; | |
- foreach my $process (keys %{$C{process}}) { | |
- next unless exists $proc{$process} || $process eq '*'; | |
- | |
- #if (DEBUG) { | |
- # print "Checking $process ... \n"; | |
- # use Data::Dumper; | |
- # print Dumper($C{process}->{$process}); | |
- #} | |
- | |
- foreach my $p (@{$proc{$process}}) { | |
- # Too many instances running | |
- if ($C{process}->{$process}->{instances} && @{$proc{$process}} > $C{process}->{$process}->{instances}) { | |
- push @{$slay{$process}}, { | |
- pid => $p->{pid}, | |
- cause => 'instances', | |
- reason => sprintf("%d instances exceeds limit of %d", | |
- scalar @{$proc{$process}}, | |
- $C{process}->{$process}->{instances}) | |
- } | |
- } | |
- | |
- # Exceeded TTL | |
- if ($C{process}->{$process}->{ttl} && time() - $p->{start} > $C{process}->{$process}->{ttl}) { | |
- push @{$slay{$process}}, { | |
- pid => $p->{pid}, | |
- cause => 'ttl', | |
- reason => sprintf("%d exceeds TTL of %d", | |
- time() - $p->{start}, | |
- $C{process}->{$process}->{ttl}) | |
- } | |
- } | |
- | |
- # Check CPU and Memory usage | |
- pctcheck($process,$p,\%slay); | |
- } | |
- } | |
- | |
- # Check CPU and Memory usage for *ALL* processes | |
- if ($C{process}->{'*'}) { | |
- while (my ($process,$proclist) = each %proc) { | |
- for my $p (@{$proclist}) { | |
- pctcheck($process,$p,\%slay,'*'); | |
- } | |
- } | |
- } | |
- | |
- # Check CPU and Memory usage | |
- sub pctcheck { | |
- my ($process,$p,$slayref,$scope) = @_; | |
- $scope ||= $process; | |
- | |
- # Exceeded CPU Percent | |
- $C{process}->{$scope}->{pctcpu} = isnumeric($C{process}->{$scope}->{pctcpu}); | |
- if ($C{process}->{$scope}->{pctcpu} && $p->{pctcpu} > $C{process}->{$scope}->{pctcpu}) { | |
- push @{$slayref->{$process}}, { | |
- pid => $p->{pid}, | |
- cause => 'pctcpu', | |
- reason => sprintf("%.2f%% CPU usage exceeds limit of %.2f%%", | |
- $p->{pctcpu}, | |
- $C{process}->{$scope}->{pctcpu}) | |
- } | |
- } | |
- | |
- # Exceeded Memory Percent | |
- $C{process}->{$scope}->{pctmem} = isnumeric($C{process}->{$scope}->{pctmem}); | |
- if ($C{process}->{$scope}->{pctmem} && $p->{pctmem} > $C{process}->{$scope}->{pctmem}) { | |
- push @{$slayref->{$process}}, { | |
- pid => $p->{pid}, | |
- cause => 'pctmem', | |
- reason => sprintf("%.2f%% memory usage exceeds limit of %.2f%%", | |
- $p->{pctmem}, | |
- $C{process}->{$scope}->{pctmem}) | |
- } | |
- } | |
- } | |
- | |
- # Kill naughty processes | |
- while (my ($process,$aryref) = each %slay) { | |
- # Decide what loglevel we should report the action as | |
- my $loglevel = loglevel($C{process}->{$process}->{killloglevel} || | |
- $C{process}->{$process}->{loglevel} || | |
- $C{killloglevel} || $C{loglevel} || LOG_NOTICE); | |
- | |
- # Protect safe process IDs | |
- if ($C{process}->{$process}->{pidfile} && !$C{process}->{$process}->{ppid}) { | |
- if (-e $C{process}->{$process}->{pidfile} && open(FH,$C{process}->{$process}->{pidfile})) { | |
- $C{process}->{$process}->{ppid} = <FH>; | |
- chomp $C{process}->{$process}->{ppid}; | |
- close(FH); | |
- } | |
- } | |
- my $ppid = $C{process}->{$process}->{ppid} || 0; | |
- | |
- # See about slaying each of these process instances | |
- foreach my $slayref (@{$aryref}) { | |
- next if $slayref->{pid} == $ppid | |
- || $slayref->{pid} == $$ | |
- || $slayref->{pid} <= 1 | |
- || $C{neverkillpid} =~ /\b$slayref->{pid}\b/ | |
- || $C{neverkillprocessname} =~ /(^|\s+)$process(\s+|$)/; | |
- | |
- # Define who to mail alerts to | |
- my $mailto = ($C{process}->{$process}->{noemailonkill} || $C{process}->{$process}->{noemail}) ? '' : | |
- $C{process}->{$process}->{adminemail} || $C{notifyemail}; | |
- | |
- # Try to slay the process | |
- slay_process($process, $loglevel, $mailto, $slayref, | |
- exists $C{process}->{$process}->{killcmd} ? $C{process}->{$process}->{killcmd} : ''); | |
- } | |
- } | |
- | |
- # Spawn any dead processes | |
- foreach my $process (keys %{$C{process}}) { | |
- # Only attempt to spawn a process if there are no current instances, and there is a spawncmd directive defined | |
- if (!exists $proc{$process} && exists $C{process}->{$process}->{spawncmd}) { | |
- | |
- # Decide what loglevel we should report the action as | |
- my $loglevel = loglevel($C{process}->{$process}->{spawnloglevel} || | |
- $C{process}->{$process}->{loglevel} || | |
- $C{spawnloglevel} || $C{loglevel} || LOG_NOTICE); | |
- | |
- # Define who to mail alerts to | |
- my $mailto = ($C{process}->{$process}->{noemailonspawn} || $C{process}->{$process}->{noemail}) ? '' : | |
- $C{process}->{$process}->{adminemail} || $C{notifyemail}; | |
- | |
- # Try to spawn the process | |
- spawn_process($process, $loglevel, $mailto, $C{process}->{$process}->{spawncmd}); | |
- } | |
- } | |
- | |
- # Explicitly nuke it for the paranoid (yes I know it's a locally scoped lexical!) ;-) | |
- undef %proc; | |
-} | |
- | |
-=pod | |
- | |
-=item slay_process() | |
- | |
-Attempts to kill a process with it's killcmd, or failing that using the kill() function. | |
-Accepts the process name, syslog log level, email notification to address and a reference | |
-to the %slay hash. | |
- | |
-=cut | |
- | |
-# Type to slay a process | |
-sub slay_process { | |
- my ($process, $loglevel, $mailto, $slayref, $cmd) = @_; | |
- | |
- # Protect safe processes | |
- if ($slayref->{pid} <= $C{lastsafepid} && !$C{protectsafepidsquietly}) { | |
- print_init_style("Saving PID $slayref->{pid} ($process) from death",'OK'); | |
- alert $loglevel, $mailto, "Saved safe PID $slayref->{pid} ($process) from death"; | |
- | |
- # This process is not protected | |
- } else { | |
- print_init_style("Killing PID $slayref->{pid} ($process)"); | |
- | |
- my $cmdrtn = $cmd && !exists $O{dryrun} ? system("$cmd > /dev/null 2>&1") : 0; | |
- if ($cmd) { # Tried to stop with the killcmd directive | |
- if ($cmdrtn) { | |
- print_init_style('FAILED'); | |
- alert $loglevel-1, $mailto, "Failed to execute '$cmd' to kill PID $slayref->{pid} ($process)"; | |
- } else { | |
- print_init_style('OK'); | |
- alert $loglevel, $mailto, "Executed '$cmd' to kill PID $slayref->{pid} ($process)"; | |
- } | |
- } | |
- | |
- # Don't try if killcmd was tried and succeded | |
- unless ($cmd && !$cmdrtn) { | |
- my $killrtn = !exists $O{dryrun} ? kill(9,$slayref->{pid}) : 1; | |
- if ($killrtn) { | |
- print_init_style('KILLED'); | |
- alert $loglevel, $mailto, "Killed PID $slayref->{pid} ($process) because $slayref->{reason}"; | |
- } else { | |
- print_init_style('FAILED'); | |
- alert $loglevel-1, $mailto, "Failed to kill PID $slayref->{pid} ($process)"; | |
- } | |
- } | |
- } | |
-} | |
- | |
-=pod | |
- | |
-=item print_init_style() | |
- | |
-Prints a Red Hat sysvinit style status message. Accepts an array of messages | |
-to display in sequence. | |
- | |
-=cut | |
- | |
-# Print a Red Hat sysinitv style status message | |
-sub print_init_style { | |
- return if $O{daemon}; | |
- foreach my $message (@_) { | |
- if (length($message) <= 6) { | |
- print "\033[60G\["; | |
- if (exists $O{dryrun}) { print "\033[1;33mDRYRUN"; } | |
- elsif ($message eq 'OK') { print "\033[1;32m OK "; } | |
- elsif ($message eq 'FAILED') { print "\033[1;31m$message"; } | |
- elsif ($message eq 'KILLED' || $message eq 'DRYRUN') { print "\033[1;33m$message"; } | |
- print "\033[0;39m\]\n"; | |
- } else { | |
- print $message; | |
- } | |
- } | |
-} | |
- | |
-=pod | |
- | |
-=item spawn_process() | |
- | |
-Attempts to spawn a process. Accepts the process name, syslog log level, mail | |
-notification to address and spawn command. | |
- | |
-=cut | |
- | |
-# Spawn a process | |
-sub spawn_process { | |
- my ($process, $loglevel, $mailto, $cmd) = @_; | |
- | |
- print_init_style("Starting $process"); | |
- my $rtn = !exists $O{dryrun} ? system("$cmd > /dev/null 2>&1") : 0; | |
- if ($rtn) { | |
- print_init_style('FAILED'); | |
- alert $loglevel-1, $mailto, "Failed to spawn '$process' with '$cmd'"; | |
- } else { | |
- print_init_style('OK'); | |
- alert $loglevel, $mailto, "Spawned '$process' with '$cmd'"; | |
- } | |
-} | |
- | |
-=pod | |
- | |
-=item display_help() | |
- | |
-Displays command line help. | |
- | |
-=cut | |
- | |
-# Command line help | |
-sub display_help { | |
- my $rtn = shift; | |
- | |
- print <<__end__; | |
-Syntax: $SELF [--conf=filename] [--daemon] [--cron] [--user=user] | |
- [--adminemail=emailaddress] [--dryrun] [--help] [--version] | |
- --help Display this help | |
- --version Display full version information | |
- --dryrun Dryrun (do not actually kill or spawn and processes) | |
- --daemon Spawn in to background daemon | |
- --cron Disables 'already running' errors with the --daemon option | |
- --conf=str Specify alternative config filename | |
- --user=str Only scan the process table for processes running as str | |
- --adminemail=str Force all notification emails to be sent to str | |
-__end__ | |
- | |
- exit($rtn) if defined $rtn; | |
-} | |
- | |
-=pod | |
- | |
-=item read_config() | |
- | |
-Reads in runtime configuration options. | |
- | |
-=cut | |
- | |
-# Read in the config | |
-sub read_config { | |
- my $config_file = shift; | |
- | |
- # Barf and die if there's no configuration file! | |
- unless (-e $config_file) { | |
- log LOG_CRIT, "Configuration file $config_file does not exist\n"; | |
- exit 4; | |
- } | |
- | |
- # Define default configuration values | |
- my %default = ( | |
- facility => 'LOG_DAEMON', | |
- loglevel => 'LOG_NOTICE', | |
- notifyemail => 'root@localhost', | |
- #notifyemailfrom => sprintf("\"%s\" <%s\@%s>",$SELF,(getpwuid($EFFECTIVE_USER_ID))[0],HOSTNAME), | |
- notifyemailfrom => sprintf('%s@%s',(getpwuid($EFFECTIVE_USER_ID))[0],HOSTNAME), | |
- smtphost => 'localhost', | |
- smtptimeout => 20, | |
- sendmailcmd => '/usr/sbin/sendmail -t', | |
- frequency => 10, | |
- lastsafepid => 100, | |
- neverkillpid => 1, | |
- neverkillprocessname => 'kswapd kupdated mdrecoveryd', | |
- protectsafepidsquietly => 0, | |
- notifydetail => 'verbose', | |
- ); | |
- | |
- # Read config file | |
- my $conf = new Config::General( | |
- -ConfigFile => $config_file, | |
- -LowerCaseNames => 1, | |
- -UseApacheInclude => 1, | |
- -IncludeRelative => 1, | |
- -DefaultConfig => \%default, | |
- -MergeDuplicateBlocks => 1, | |
- -AllowMultiOptions => 1, | |
- -MergeDuplicateOptions => 1, | |
- -AutoTrue => 1, | |
- ); | |
- my %config = $conf->getall; | |
- | |
- # Force default values for dodgy user configuration options | |
- $config{frequency} = $default{frequency} unless $config{frequency} =~ /^\d+$/; | |
- $config{lastsafepid} = isnumeric($config{lastsafepid}) || $default{lastsafepid}; | |
- | |
- return %config; | |
-} | |
- | |
- | |
- | |
- | |
- | |
-######################################## | |
-# Subroutines | |
- | |
-=pod | |
- | |
-=item isnumeric() | |
- | |
-An evil bastard fudge to ensure that we're only dealing with numerics when | |
-necessary, from the config file and Proc::ProcessTable scan. | |
- | |
-=cut | |
- | |
-sub isnumeric { | |
- local $_ = shift || ''; | |
- if (/^\s*(\-?[\d\.]+)\s*/) { return $1; } | |
- return undef; | |
-} | |
- | |
-=pod | |
- | |
-=item loglevel() | |
- | |
-Accepts a syslog loglevel keyword and returns the associated constant integer. | |
- | |
-=cut | |
- | |
-sub loglevel { | |
- local $_ = shift || ''; | |
- return $_ if /^\d+$/; | |
- return LOG_EMERG if /^\s*([a-z]+_)?EMERG((A|E)NCY)?\s*$/i; | |
- return LOG_ALERT if /^\s*([a-z]+_)?ALERT\s*$/i; | |
- return LOG_CRIT if /^\s*([a-z]+_)?CRIT(ICAL)?\s*$/i; | |
- return LOG_ERR if /^\s*([a-z]+_)?ERR(OR)?\s*$/i; | |
- return LOG_WARNING if /^\s*([a-z]+_)?WARN(ING)?\s*$/i; | |
- #return LOG_NOTICE if /^\s*([a-z]+_)?NOTICE\s*$/i; | |
- return LOG_INFO if /^\s*([a-z]+_)?INFO(MATION(AL)?)?\s*$/i; | |
- return LOG_DEBUG if /^\s*([a-z]+_)?DEBUG\s*$/i; | |
- return LOG_NOTICE; | |
-} | |
- | |
-=pod | |
- | |
-=item logfacility() | |
- | |
-Accepts a syslog facility keyword and returns the associated constant integer. | |
- | |
-=cut | |
- | |
-sub logfacility { | |
- local $_ = shift || ''; | |
- return $_ if /^\d+$/; | |
- return LOG_KERN if /^\s*([a-z]+_)?KERN((A|E)L)?\s*$/i; | |
- return LOG_USER if /^\s*([a-z]+_)?USER\s*$/i; | |
- return LOG_MAIL if /^\s*([a-z]+_)?MAIL\s*$/i; | |
- #return LOG_DAEMON if /^\s*([a-z]+_)?DAEMON\s*$/i; | |
- return LOG_AUTH if /^\s*([a-z]+_)?AUTH\s*$/i; | |
- return LOG_SYSLOG if /^\s*([a-z]+_)?SYSLOGD?\s*$/i; | |
- return LOG_LPR if /^\s*([a-z]+_)?LPR\s*$/i; | |
- return LOG_NEWS if /^\s*([a-z]+_)?NEWS\s*$/i; | |
- return LOG_UUCP if /^\s*([a-z]+_)?UUCP\s*$/i; | |
- return LOG_CRON if /^\s*([a-z]+_)?CRON\s*$/i; | |
- return LOG_AUTHPRIV if /^\s*([a-z]+_)?AUTHPRIV\s*$/i; | |
- return LOG_FTP if /^\s*([a-z]+_)?FTPD?\s*$/i; | |
- return LOG_LOCAL0 if /^\s*([a-z]+_)?LOCAL0\s*$/i; | |
- return LOG_LOCAL1 if /^\s*([a-z]+_)?LOCAL1\s*$/i; | |
- return LOG_LOCAL2 if /^\s*([a-z]+_)?LOCAL2\s*$/i; | |
- return LOG_LOCAL3 if /^\s*([a-z]+_)?LOCAL3\s*$/i; | |
- return LOG_LOCAL4 if /^\s*([a-z]+_)?LOCAL4\s*$/i; | |
- return LOG_LOCAL5 if /^\s*([a-z]+_)?LOCAL5\s*$/i; | |
- return LOG_LOCAL6 if /^\s*([a-z]+_)?LOCAL6\s*$/i; | |
- return LOG_LOCAL7 if /^\s*([a-z]+_)?LOCAL7\s*$/i; | |
- return LOG_DAEMON; | |
-} | |
- | |
-=pod | |
- | |
-=item alert() | |
- | |
-Logs a message to syslog using log() and sends a notification email using | |
-sendmail(). | |
- | |
-=cut | |
- | |
-# Report something to user and syslog | |
-sub alert { | |
- my ($LOG_TYPE,$mailto,$subject,@ary) = @_; | |
- $subject ||= 'undef alert message'; | |
- $subject .= ' [DRYRUN]' if exists $O{dryrun}; | |
- log $LOG_TYPE, $subject; | |
- sendmail($C{notifyemailfrom},$mailto,$subject,@ary) if $mailto; | |
-} | |
- | |
-=pod | |
- | |
-=item log() | |
- | |
-Logs messages to DAEMON facility in syslog. Accepts a log | |
-level and message array. Will terminate the process if it is | |
-asked to log a message of a log level 2 or less (LOG_EMERG, | |
-LOG_ALERT, LOG_CRIT). | |
- | |
-=cut | |
- | |
-sub log { | |
- my ($loglevel,@msg) = @_; | |
- $loglevel = LOG_INFO if !defined $loglevel || $loglevel !~ /^[0-7]$/; | |
- @msg = '' unless @msg; | |
- unshift @msg,'Process exiting!' if $loglevel <= 2; | |
- { # Unix::Syslog gets unhappy for it's sprintf stuff otherwise :) | |
- (my $syslogmsg = "@msg") =~ s/%/%%/g; | |
- syslog $loglevel, $syslogmsg; | |
- } | |
- #if ($loglevel <= 2) { | |
- # warn "@msg\n"; | |
- # exit(1); | |
- #} | |
-} | |
- | |
-=pod | |
- | |
-=item sendmail() | |
- | |
-Sends email notifications of syslog messages, called by alert(). | |
-Accepts sending email address, recipient email address, short | |
-message subject and an optional detailed message body array. | |
- | |
-=cut | |
- | |
-# Send an email | |
-sub sendmail { | |
- my ($mail,$to,$subject,@ary) = @_; | |
- | |
- $to = $O{adminemail} if exists $O{adminemail}; | |
- @ary = $subject unless @ary; | |
- $subject = sprintf("[%s/%s] %s",$SELF,HOSTNAME,$subject); | |
- unshift @ary,"Subject: $subject\n"; | |
- unshift @ary,"To: \"$to\" <$to>"; | |
- unshift @ary,"From: \"$mail\" <$mail>"; | |
- | |
- | |
- | |
-################################################# | |
-# I may remove this code in the future. I think | |
-# it's probably overkill, and it's not especially | |
-# portable. | |
- | |
- # Append /proc file information to @ary if necessary | |
- my @debugfiles = $C{notifydetail} =~ /^\s*verbose\s*$/i ? qw/version loadavg meminfo/ : | |
- $C{notifydetail} =~ /^\s*debug\s*$/i ? qw/version loadavg meminfo swaps mounts filesystems partition smodules/ : | |
- $C{notifydetail} =~ /^[a-z0-9\s]+$/i ? $C{notifydetail} : | |
- undef; | |
- for my $file (@debugfiles) { | |
- next unless $file && -e "/proc/$file"; | |
- if (open(PFH,"/proc/$file")) { | |
- push @ary, ("\n/proc/$file", '=' x length("/proc/$file")); | |
- while (local $_ = <PFH>) { chomp; push @ary, $_; } | |
- close(PFH) || log LOG_WARNING, "Unable to close file handle PFH for file '/proc/$file': $!\n"; | |
- } else {log LOG_WARNING, "Unable to open file handle PFH for file '/proc/$file': $!\n"; } | |
- } | |
-################################################# | |
- | |
- | |
- | |
- # Open the SMTP connection | |
- my $smtp = Net::SMTP->new( | |
- $C{smtphost}, | |
- Timeout => $C{smtptimeout}, | |
- Hello => HOSTNAME, | |
- ); | |
- | |
- # If the SMTP connection was established then send the email | |
- if ($smtp) { | |
- $smtp->mail($mail); | |
- $smtp->to($to); | |
- $smtp->data(join("\n",@ary)); | |
- $smtp->dataend(); | |
- | |
- # Otherwise try using the local sendmail binary | |
- } else { | |
- log LOG_WARNING, "Unable to establish SMTP connection with $C{smtphost}; attempting sendmail pipe instead"; | |
- if (open(PH,"|$C{sendmailcmd}")) { | |
- print PH $_ for @ary; | |
- close(PH) || log LOG_WARNING, "Unable to close pipe handle PH for command '|$C{sendmailcmd}': $!"; | |
- } else { | |
- log LOG_WARNING, "Unable to open pipe handle PH for command '|$C{sendmailcmd}': $!"; | |
- } | |
- } | |
-} | |
- | |
-=pod | |
- | |
-=item daemonize() | |
- | |
-Launches the process in to the background. Checks to see if there is already an | |
-instance running. | |
- | |
-=cut | |
- | |
-# Daemonize self | |
-sub daemonize { | |
- my $pidfile = shift; | |
- # Check that we're not already running, and quit if we are | |
- if (-f $pidfile) { | |
- unless (open(PID,$pidfile)) { | |
- log LOG_CRIT, "Unable to open file handle PID for file '$pidfile': $!\n"; | |
- exit 5; | |
- } | |
- my $pid = <PID>; | |
- close(PID) || log LOG_WARNING, "Unable to close file handle PID for file '$pidfile': $!\n"; | |
- #print `ls -al /proc/$pid/stat` if DEBUG; | |
- if (-f "/proc/$pid/stat") { | |
- open(FH,"/proc/$pid/stat") || log LOG_WARNING, "Unable to open file handle FH for file '/proc/$pid/stat': $!\n"; | |
- my $line = <FH>; | |
- close(FH) || log LOG_WARNING, "Unable to close file handle FH for file '/proc/$pid/stat': $!\n"; | |
- if ($line =~ /\d+[^(]*\((.*)\)\s*/) { | |
- #if ($line =~ /\d+\s+\((.+?)\)\s+/) { | |
- my $process = $1; | |
- if ($process =~ /^$SELF$/) { | |
- log LOG_NOTICE, "$SELF already running at PID $pid; exiting.\n" unless exists $O{cron}; | |
- closelog; | |
- exit 0; | |
- } | |
- } | |
- } else { | |
- log LOG_NOTICE, "Removing stale PID file.\n"; | |
- unlink($pidfile); | |
- } | |
- } | |
- | |
- # Daemon parent about to spawn | |
- if (my $pid = fork) { | |
- log LOG_NOTICE, "Forking background daemon, process $pid.\n"; | |
- closelog; | |
- exit 0; | |
- | |
- # Child daemon process that was spawned | |
- } else { | |
- # Fork a second time to get rid of any attached terminals | |
- if (my $pid = fork) { | |
- log LOG_NOTICE, "Forking second background daemon, process $pid.\n"; | |
- closelog; | |
- exit 0; | |
- } else { | |
- unless (defined $pid) { | |
- log LOG_CRIT, "Cannot fork: $!\n"; | |
- exit 6; | |
- } | |
- close(STDOUT); close(STDERR); chdir '/'; | |
- unless (open(FH,">$pidfile")) { | |
- log LOG_CRIT, "Unable to open file handle FH for file '$pidfile': $!\n"; | |
- exit 7; | |
- } | |
- print FH $$; | |
- close(FH) || log LOG_WARNING, "Unable to close file handle FH for file '$pidfile': $!\n"; | |
- } | |
- } | |
-} | |
- | |
-=pod | |
- | |
-=item display_version() | |
- | |
-Displays complete version, author and license information. | |
- | |
-=back | |
- | |
-=cut | |
- | |
-# Display version information | |
-sub display_version { | |
- my $rtn = shift; | |
- if ('$Revision: 1.57 $' =~ /Revision: (\S+)/) { | |
- print "$SELF $1\n"; | |
- } | |
- print "$VERSION\n"; | |
- print "Written by Nicholas P Lawrence, <nicl\@perlguy.org.uk>.\n\n"; | |
- print "Copyright (C) 2002,2003 Nicholas P Lawrence.\n\n"; | |
- print <<EOL; | |
-This program is free software; you can redistribute it and/or | |
-modify it under the terms of the GNU General Public License | |
-as published by the Free Software Foundation; either version 2 | |
-of the License, or (at your option) any later version. | |
- | |
-This program is distributed in the hope that it will be useful, | |
-but WITHOUT ANY WARRANTY; without even the implied warranty of | |
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
-GNU General Public License for more details. | |
- | |
-You should have received a copy of the GNU General Public License | |
-along with this program; if not, write to the Free Software | |
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
-EOL | |
- exit($rtn) if defined $rtn; | |
-} | |
- | |
- | |
- | |
- | |
- | |
-=pod | |
- | |
-=head1 BUGS | |
- | |
-Hopefully none. ;-) Send any bug reports to me at nicl@perlguy.org.uk | |
-along with any patches and details of how to replicate the problem. | |
-Please only send reports for bugs which can be replicated in the | |
-I<latest> version of the software. The latest version can always be | |
-found at http://psmon.perlguy.org.uk | |
- | |
-=head1 TODO | |
- | |
-The following functionality will be added soon: | |
- | |
-=over 4 | |
- | |
-=item Code cleanup | |
- | |
-The code needs to be cleaned up and made more efficient. | |
- | |
-=item killperprocessname directive | |
- | |
-Will accept a boolean value. If true, only 1 process per process scope | |
-will ever be killed, instead of all process IDs matching kill rules. | |
-This should be used in conjunction with the new killcmd directive. For | |
-example, you may define that a database daemon may never take up more | |
-than 90% CPU time, and it runs many children processes. If it exceeds | |
-90% CPU time, you want to issue ONE restart command in order to stop and | |
-then start all the database processes in one go. | |
- | |
-=item time period limited rules | |
- | |
-Functionality to limit validity of process scopes to only be checked | |
-between defined time periods. For example, only check that httpd is running | |
-between the hours of 8am and 5pm on Mondays and Tuesdays. | |
- | |
-=back | |
- | |
-=head1 SEE ALSO | |
- | |
-nsmon | |
- | |
-=head1 LICENSE | |
- | |
-Written by Nicholas P Lawrence, <nicl@perlguy.org.uk>. | |
-Copyright (C) 2002,2003 Nicholas P Lawrence. | |
- | |
-This program is free software; you can redistribute it and/or | |
-modify it under the terms of the GNU General Public License | |
-as published by the Free Software Foundation; either version 2 | |
-of the License, or (at your option) any later version. | |
- | |
-This program is distributed in the hope that it will be useful, | |
-but WITHOUT ANY WARRANTY; without even the implied warranty of | |
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
-GNU General Public License for more details. | |
- | |
-You should have received a copy of the GNU General Public License | |
-along with this program; if not, write to the Free Software | |
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
- | |
-=head1 AUTHOR | |
- | |
-PerlGuy <nicl@perlguy.org.uk> | |
- | |
-http://perlguy.org.uk/perl_guy/ | |
- | |
-=cut | |
- | |
- | |
-__END__ | |
- | |
-#define KERN_EMERG "<0>" /* system is unusable */ | |
-#define KERN_ALERT "<1>" /* action must be taken immediately */ | |
-#define KERN_CRIT "<2>" /* critical conditions */ | |
-#define KERN_ERR "<3>" /* error conditions */ | |
-#define KERN_WARNING "<4>" /* warning conditions */ | |
-#define KERN_NOTICE "<5>" /* normal but significant condition */ | |
-#define KERN_INFO "<6>" /* informational */ | |
-#define KERN_DEBUG "<7>" /* debug-level messages */ | |
- | |
- | |
- | |
diff --git a/psmon-1.0.4/psmon.1 b/psmon-1.0.4/psmon.1 | |
deleted file mode 100644 | |
index d5e024a..0000000 | |
--- a/psmon-1.0.4/psmon.1 | |
+++ /dev/null | |
@@ -1,651 +0,0 @@ | |
-.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 | |
-.\" | |
-.\" Standard preamble: | |
-.\" ======================================================================== | |
-.de Sh \" Subsection heading | |
-.br | |
-.if t .Sp | |
-.ne 5 | |
-.PP | |
-\fB\\$1\fR | |
-.PP | |
-.. | |
-.de Sp \" Vertical space (when we can't use .PP) | |
-.if t .sp .5v | |
-.if n .sp | |
-.. | |
-.de Vb \" Begin verbatim text | |
-.ft CW | |
-.nf | |
-.ne \\$1 | |
-.. | |
-.de Ve \" End verbatim text | |
-.ft R | |
-.fi | |
-.. | |
-.\" Set up some character translations and predefined strings. \*(-- will | |
-.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left | |
-.\" double quote, and \*(R" will give a right double quote. | will give a | |
-.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to | |
-.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' | |
-.\" expand to `' in nroff, nothing in troff, for use with C<>. | |
-.tr \(*W-|\(bv\*(Tr | |
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' | |
-.ie n \{\ | |
-. ds -- \(*W- | |
-. ds PI pi | |
-. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch | |
-. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch | |
-. ds L" "" | |
-. ds R" "" | |
-. ds C` "" | |
-. ds C' "" | |
-'br\} | |
-.el\{\ | |
-. ds -- \|\(em\| | |
-. ds PI \(*p | |
-. ds L" `` | |
-. ds R" '' | |
-'br\} | |
-.\" | |
-.\" If the F register is turned on, we'll generate index entries on stderr for | |
-.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index | |
-.\" entries marked with X<> in POD. Of course, you'll have to process the | |
-.\" output yourself in some meaningful fashion. | |
-.if \nF \{\ | |
-. de IX | |
-. tm Index:\\$1\t\\n%\t"\\$2" | |
-.. | |
-. nr % 0 | |
-. rr F | |
-.\} | |
-.\" | |
-.\" For nroff, turn off justification. Always turn off hyphenation; it makes | |
-.\" way too many mistakes in technical documents. | |
-.hy 0 | |
-.if n .na | |
-.\" | |
-.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). | |
-.\" Fear. Run. Save yourself. No user-serviceable parts. | |
-. \" fudge factors for nroff and troff | |
-.if n \{\ | |
-. ds #H 0 | |
-. ds #V .8m | |
-. ds #F .3m | |
-. ds #[ \f1 | |
-. ds #] \fP | |
-.\} | |
-.if t \{\ | |
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m) | |
-. ds #V .6m | |
-. ds #F 0 | |
-. ds #[ \& | |
-. ds #] \& | |
-.\} | |
-. \" simple accents for nroff and troff | |
-.if n \{\ | |
-. ds ' \& | |
-. ds ` \& | |
-. ds ^ \& | |
-. ds , \& | |
-. ds ~ ~ | |
-. ds / | |
-.\} | |
-.if t \{\ | |
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" | |
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' | |
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' | |
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' | |
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' | |
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' | |
-.\} | |
-. \" troff and (daisy-wheel) nroff accents | |
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' | |
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H' | |
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] | |
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' | |
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' | |
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] | |
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] | |
-.ds ae a\h'-(\w'a'u*4/10)'e | |
-.ds Ae A\h'-(\w'A'u*4/10)'E | |
-. \" corrections for vroff | |
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' | |
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' | |
-. \" for low resolution devices (crt and lpr) | |
-.if \n(.H>23 .if \n(.V>19 \ | |
-\{\ | |
-. ds : e | |
-. ds 8 ss | |
-. ds o a | |
-. ds d- d\h'-1'\(ga | |
-. ds D- D\h'-1'\(hy | |
-. ds th \o'bp' | |
-. ds Th \o'LP' | |
-. ds ae ae | |
-. ds Ae AE | |
-.\} | |
-.rm #[ #] #H #V #F C | |
-.\" ======================================================================== | |
-.\" | |
-.IX Title "PSMON 1" | |
-.TH PSMON 1 "2003-03-20" "perl v5.8.0" "User Contributed Perl Documentation" | |
-.SH "NAME" | |
-psmon \- Process Table Monitoring Script | |
-.SH "VERSION" | |
-.IX Header "VERSION" | |
-$Id: psmon.1,v 1.1 2003/03/20 16:21:14 nicl Exp $ | |
-.SH "SYNOPSIS" | |
-.IX Header "SYNOPSIS" | |
-Single user account crontab operation. | |
-.PP | |
-.Vb 5 | |
-\& # DO NOT EDIT THIS FILE - edit the master and reinstall. | |
-\& # (/tmp/crontab.28945 installed on Wed Jan 8 16:29:24 2003) | |
-\& # (Cron version -- $Id: psmon.1,v 1.1 2003/03/20 16:21:14 nicl Exp $) | |
-\& MAILTO="nicl@perlguy.org.uk" | |
-\& USER=nicl | |
-.Ve | |
-.PP | |
-.Vb 1 | |
-\& */5 * * * * /sbin/psmon --daemon --cron --conf=~/etc/psmon.conf --user=$USER --adminemail=nicl@perlguy.org.uk | |
-.Ve | |
-.PP | |
-Regular system-wide call from cron: | |
-.PP | |
-.Vb 1 | |
-\& */5 * * * * /sbin/psmon --daemon --cron | |
-.Ve | |
-.PP | |
-Only check processes during working office hours: | |
-.PP | |
-.Vb 1 | |
-\& * 9-17 * * * /sbin/psmon | |
-.Ve | |
-.PP | |
-Command line syntax. | |
-.PP | |
-.Vb 11 | |
-\& [nicl@nicl]$ psmon --help | |
-\& Syntax: psmon [--conf=filename] [--daemon] [--cron] [--user=user] | |
-\& [--adminemail=emailaddress] [--dryrun] [--help] [--version] | |
-\& --help Display this help | |
-\& --version Display full version information | |
-\& --dryrun Dryrun (do not actually kill or spawn and processes) | |
-\& --daemon Spawn in to background daemon | |
-\& --cron Disables 'already running' errors with the --daemon option | |
-\& --conf=str Specify alternative config filename | |
-\& --user=str Only scan the process table for processes running as str | |
-\& --adminemail=str Force all notification emails to be sent to str | |
-.Ve | |
-.SH "DESCRIPTION" | |
-.IX Header "DESCRIPTION" | |
-This script monitors the process table using Proc::ProcessTable, and | |
-will respawn or kill processes based on a set of rules defined in an | |
-Apache style configuration file. | |
-.PP | |
-Processes will be respawned if a spawn command is defined for a process, | |
-and no occurances of that process are running. If the \-\-user command line | |
-option is specified, then the process will only be spawned if no instances | |
-are running as the specified userid. | |
-.PP | |
-Processes can be killed off if they have been running for too long, | |
-use too much \s-1CPU\s0 or memory resources, or have too many concurrent | |
-versions running. Exceptions can be made to kill rulesets using the | |
-\&\fIpidfile\fR and \fIlastsafepid\fR directives. | |
-.PP | |
-If a \s-1PID\s0 file is declared for a process, psmon will never kill the | |
-process \s-1ID\s0 that is contained within the pid file. This is useful if for | |
-example, you have a script which spawns hundreds of child processes | |
-which you may need to automatically kill, but you do not want to kill | |
-the parent process. | |
-.PP | |
-Any actions performed will be logged to the \s-1DAEMON\s0 syslog facility by default. | |
-There is support to optionally also send notifications emails to an | |
-administrator on a global or pre-rule basis. | |
-.SH "OPERATION" | |
-.IX Header "OPERATION" | |
-.IP "\-\-dryrun" 4 | |
-.IX Item "--dryrun" | |
-Execute a dry-run (do not actually kill or spawn and processes). | |
-.IP "\-\-conf=\fIfilename\fR" 4 | |
-.IX Item "--conf=filename" | |
-Specify alternative config filename. | |
-.IP "\-\-daemon" 4 | |
-.IX Item "--daemon" | |
-Spawn in to background daemon. | |
-.IP "\-\-cron" 4 | |
-.IX Item "--cron" | |
-Disables already running warnings when trying to launch as another daemon. | |
-.IP "\-\-user=\fIuser\fR" 4 | |
-.IX Item "--user=user" | |
-Only scan the process table for processes running under this username. | |
-.IP "\-\-adminemail=\fIemailaddress\fR" 4 | |
-.IX Item "--adminemail=emailaddress" | |
-Force all notification emails to be sent to this email address. | |
-.SH "INSTALLATION" | |
-.IX Header "INSTALLATION" | |
-In addition to Perl 5.005_03 or higher, the following Perl modules are | |
-required: | |
-.PP | |
-.Vb 6 | |
-\& Getopt::Long | |
-\& Config::General | |
-\& POSIX | |
-\& Proc::ProcessTable | |
-\& Net::SMTP | |
-\& Unix::Syslog | |
-.Ve | |
-.PP | |
-The \s-1POSIX\s0 module is usually supplied with Perl as standard, as is | |
-Getopt::Long. All these modules can be obtained from \s-1CPAN\s0. Visit | |
-http://search.span.org and http://www.cpan.org for further details. | |
-For the lazy people reading this, you can try the | |
-following command to install these modules: | |
-.PP | |
-.Vb 2 | |
-\& for m in Getopt::Long Config::General POSIX Proc::ProcessTable \e | |
-\& Net::SMTP Unix::Syslog;do perl -MCPAN -e"install $m";done | |
-.Ve | |
-.PP | |
-Alternatively you can run the install.sh script which comes in the | |
-distribution tarball. It will attempt to install the right modules, | |
-install the script and configuration file, and generate \s-1UNIX\s0 man page | |
-documentation. | |
-.PP | |
-By default psmon will look for its runtime configuration in /etc/psmon.conf, | |
-although this can be defined as otherwise from the command line. For system | |
-wide installations it is reccomended that you install your psmon in to the | |
-default location. | |
-.SH "CONFIGURATION" | |
-.IX Header "CONFIGURATION" | |
-The default configuration file location is /etc/psmon.conf. A different | |
-configuration file can be declared from the command line. | |
-.PP | |
-Syntax of the configuration file is based upon that which is used by | |
-Apache. Each process to be monitored is declared with a Process scope | |
-directive like this example which monitors the OpenSSH daemon: | |
-.PP | |
-.Vb 6 | |
-\& <Process sshd> | |
-\& spawncmd /sbin/service sshd start | |
-\& pidfile /var/run/sshd.pid | |
-\& instances 50 | |
-\& pctcpu 90 | |
-\& </Process> | |
-.Ve | |
-.PP | |
-There is a special \fI*\fR process scope which applies to \fIall\fR running | |
-processes. This special scope should be used with extreme care. It does | |
-not support the use of the \fIspawncmd\fR, \fIpidfile\fR, \fIinstances\fR or \fIttl\fR | |
-directivers. A typical example of this scope might be as follows: | |
-.PP | |
-.Vb 4 | |
-\& <Process *> | |
-\& pctcpu 95 | |
-\& pctmem 80 | |
-\& </Process> | |
-.Ve | |
-.PP | |
-Global directives which are not specific to any one process should be placed | |
-outside of any Process scopes. | |
-.Sh "\s-1DIRECTIVES\s0" | |
-.IX Subsection "DIRECTIVES" | |
-.IP "Facility" 4 | |
-.IX Item "Facility" | |
-Defines which syslog facility to log to. Valid options are as follows; | |
-\&\s-1LOG_KERN\s0, \s-1LOG_USER\s0, \s-1LOG_MAIL\s0, \s-1LOG_DAEMON\s0, \s-1LOG_AUTH\s0, \s-1LOG_SYSLOG\s0, \s-1LOG_LPR\s0, | |
-\&\s-1LOG_NEWS\s0, \s-1LOG_UUCP\s0, \s-1LOG_CRON\s0, \s-1LOG_LOCAL0\s0, \s-1LOG_LOCAL1\s0, \s-1LOG_LOCAL2\s0, | |
-\&\s-1LOG_LOCAL3\s0, \s-1LOG_LOCAL4\s0, \s-1LOG_LOCAL5\s0, \s-1LOG_LOCAL6\s0 and \s-1LOG_LOCAL7\s0. Defaults | |
-to \s-1LOG_DAEMON\s0. | |
-.IP "LogLevel" 4 | |
-.IX Item "LogLevel" | |
-Defines the loglevel priority that notifications to syslog will be | |
-marked as. Valid options are as follows; \s-1LOG_EMERG\s0, \s-1LOG_ALERT\s0, \s-1LOG_CRIT\s0, | |
-\&\s-1LOG_ERR\s0, \s-1LOG_WARNING\s0, \s-1LOG_NOTICE\s0, \s-1LOG_INFO\s0 and \s-1LOG_DEBUG\s0. The log level | |
-used by a notification for any failed action will automatically be | |
-raised to the next level in order to highlight the failure. May be also be used | |
-in a Process scope which will take priority over a global declaration. | |
-Defaults to \s-1LOG_NOTICE\s0. | |
-.IP "KillLogLevel (previously KillPIDLogLevel)" 4 | |
-.IX Item "KillLogLevel (previously KillPIDLogLevel)" | |
-The same as the loglevel directive, but only applies to process kill actions. | |
-Takes priority over the loglevel directive. May be also be used in a | |
-Process scope which will take priority over a global declaration. | |
-Undefined by default. | |
-.IP "SpawnLogLevel" 4 | |
-.IX Item "SpawnLogLevel" | |
-The same as the loglevel directive, but only applies to process spawn actions. | |
-Takes priority over the loglevel directive. May be also be used in a | |
-Process scope which will take priority over a global declaration. | |
-Undefined by default. | |
-.IP "AdminEmail" 4 | |
-.IX Item "AdminEmail" | |
-Defines the email address where notification emails should be sent to. | |
-May be also be used in a Process scope which will take priority over a | |
-global declaration. Defaults to root@localhost. | |
-.IP "NotifyEmailFrom" 4 | |
-.IX Item "NotifyEmailFrom" | |
-Defines the email address that notification email should be addresses | |
-from. Defaults to <username>@\fIhostname\fR. | |
-.IP "Frequency" 4 | |
-.IX Item "Frequency" | |
-Defines the frequency of process table queries. Defaults to 60 seconds. | |
-.IP "LastSafePID" 4 | |
-.IX Item "LastSafePID" | |
-When defined, psmon will never attempt to kill a process \s-1ID\s0 which is | |
-numerically less than or equal to the value defined by lastsafepid. It | |
-should be noted that psmon will never attempt to kill itself, or a process \s-1ID\s0 | |
-less than or equal to 1. Defaults to 100. | |
-.IP "ProtectSafePIDsQuietly" 4 | |
-.IX Item "ProtectSafePIDsQuietly" | |
-Accepts a boolean value of On or Off. Surpresses all notifications of | |
-preserved process IDs when used in conjunction with the \fIlastsafepid\fR | |
-directive. Defaults to Off. | |
-.IP "SMTPHost" 4 | |
-.IX Item "SMTPHost" | |
-Defines the \s-1IP\s0 address or hostname of the \s-1SMTP\s0 server to used to send | |
-email notifications. Defaults to localhost. | |
-.IP "SMTPTimeout" 4 | |
-.IX Item "SMTPTimeout" | |
-Defines the timeout in seconds to be used during \s-1SMTP\s0 connections. | |
-Defaults to 20 seconds. | |
-.IP "SendmailCmd" 4 | |
-.IX Item "SendmailCmd" | |
-Defines the sendmail command to use to send notification emails if there | |
-is a failure with the \s-1SMTP\s0 connection to the host defined by smtphost. | |
-Defaults to '/usr/sbin/sendmail \-t'. | |
-.IP "Dryrun" 4 | |
-.IX Item "Dryrun" | |
-Forces this psmon to as if the \-\-dryrun command line switch had specified. | |
-This is useful if you want to force a specific configuration file to only | |
-report and never actually take any automated action. | |
-.IP "NotifyDetail" 4 | |
-.IX Item "NotifyDetail" | |
-Defines the verbosity of notification emails which are sent. Can be set | |
-to 'Simple', 'Verbose' or 'Debug'. Defaults to 'Verbose'. This function | |
-will be removed soon. It is unnecessary bloat and is not very portable. | |
-.Sh "\s-1PROCESS\s0 \s-1SCOPE\s0 \s-1DIRECTIVES\s0" | |
-.IX Subsection "PROCESS SCOPE DIRECTIVES" | |
-.IP "SpawnCmd" 4 | |
-.IX Item "SpawnCmd" | |
-Defines the full command line to be executed in order to respawn a dead | |
-process. | |
-.IP "KillCmd" 4 | |
-.IX Item "KillCmd" | |
-Defines the full command line to be executed in order to gracefully | |
-shutdown or kill a rogue process. If the command returns a boolean true | |
-exit status then it is assumed that the command failed to execute | |
-sucessfully. If no KillCmd is specified or the command fails, the | |
-process will be killed by sending a \s-1SIGKILL\s0 signal with the standard | |
-\&\fIkill()\fR function. Undefined by default. | |
-.IP "PIDFile" 4 | |
-.IX Item "PIDFile" | |
-Defines the full path and filename of a file created by a process which | |
-contain it's main parent process \s-1ID\s0. | |
-.IP "\s-1TTL\s0" 4 | |
-.IX Item "TTL" | |
-Defines a maximum time to live (in seconds) of a process. The process | |
-will be killed once it has been running longer than this value, and | |
-it's process \s-1ID\s0 isn't contained in the defined pidfile. | |
-.IP "PctCpu" 4 | |
-.IX Item "PctCpu" | |
-Defines a maximum allowable percentage of \s-1CPU\s0 time a process may use. | |
-The process will be killed once it's \s-1CPU\s0 usage exceeds this threshold | |
-and it's process \s-1ID\s0 isn't contained in the defined pidfile. | |
-.IP "PctMem" 4 | |
-.IX Item "PctMem" | |
-Defines a maximum allowable percentage of total system memory a process | |
-may use. The process will be killed once it's memory usage exceeds this | |
-threshold and it's process \s-1ID\s0 isn't contained in the defined pidfile. | |
-.IP "Instances" 4 | |
-.IX Item "Instances" | |
-Defines a maximum number of instances of a process which may run. The | |
-process will be killed once there are more than this number of occurances | |
-running, and it's process \s-1ID\s0 isn't contained in the defined pid file. | |
-.IP "NoEmailOnKill" 4 | |
-.IX Item "NoEmailOnKill" | |
-Accepts a boolean value of True or False. Surpresses process killing | |
-notification emails for this process scope. Defaults to False. | |
-.IP "NoEmailOnSpawn" 4 | |
-.IX Item "NoEmailOnSpawn" | |
-Accepts a boolean value of True or False. Surpresses process spawning | |
-notification emails for this process scope. Defaults to False. | |
-.IP "NoEmail" 4 | |
-.IX Item "NoEmail" | |
-Accepts a boolean value of True or False. Surpresses all notification | |
-emails for this process scope. Defaults to False. | |
-.IP "NeverKillPID" 4 | |
-.IX Item "NeverKillPID" | |
-Accepts a space delimited list of PIDs which will never be killed. | |
-Defaults to 1. | |
-.IP "NeverKillProcessName" 4 | |
-.IX Item "NeverKillProcessName" | |
-Accepts a space deliomited list of process names which will never be | |
-killed. Defaults to 'kswapd kupdated mdrecoveryd'. | |
-.Sh "\s-1EXAMPLES\s0" | |
-.IX Subsection "EXAMPLES" | |
-.Vb 7 | |
-\& <Process syslogd> | |
-\& spawncmd /sbin/service syslogd restart | |
-\& pidfile /var/run/syslogd.pid | |
-\& instances 1 | |
-\& pctcpu 70 | |
-\& pctmem 30 | |
-\& </Process> | |
-.Ve | |
-.PP | |
-Syslog is a good example of a process which can get a little full | |
-of itself under certian circumstances, and excessively hog \s-1CPU\s0 and | |
-memory. Here we will kill off syslogd processes if it exceeds 70% | |
-\&\s-1CPU\s0 or 30% memory utilization. | |
-.PP | |
-Older running copies of syslogd will be killed if they are running, | |
-while leaving the most recently spawned copy which will be listed in | |
-the \s-1PID\s0 file defined. | |
-.PP | |
-.Vb 6 | |
-\& <Process httpd> | |
-\& spawncmd /sbin/service httpd restart | |
-\& pidfile /var/run/httpd.pid | |
-\& loglevel critical | |
-\& adminemail pager@noc.company.com | |
-\& </Process> | |
-.Ve | |
-.PP | |
-Here we are monitoring Apache to ensure that it is restarted if | |
-it dies. The pidfile directive in this example is actually | |
-redundant because we have not defined any rule where we should | |
-consider killing any httpd processes. | |
-.PP | |
-All notifications relating to this process will be logged with the | |
-syslog priority of critical (\s-1LOG_CRIT\s0), and all emailed to | |
-pager@noc.company.com which could typically forward to a pager. | |
-.PP | |
-Any failed attempts to kill or restart a process will automatically | |
-be logged as a syslog priority one level higher than that specified. | |
-If a restart of Apache were to fail in this example, a wall | |
-notification would be broadcast to all interactive terminals | |
-connected to the machine, since the next log priority up from | |
-\&\s-1LOG_CRIT\s0 is \s-1LOG_EMERG\s0. | |
-.PP | |
-.Vb 4 | |
-\& <Process find> | |
-\& noemail True | |
-\& ttl 3600 | |
-\& </Process> | |
-.Ve | |
-.PP | |
-Kill old find processes which have been running for over an hour. | |
-Do not send an email notification since it's not too important. | |
-.SH "SIGNALS" | |
-.IX Header "SIGNALS" | |
-.IP "\s-1HUP\s0" 4 | |
-.IX Item "HUP" | |
-Forces an immediate reload of the configuration file. You should | |
-send the \s-1HUP\s0 signal when you are running psmon as a background | |
-daemon and have altered the psmon.conf file. | |
-.IP "\s-1USR1\s0" 4 | |
-.IX Item "USR1" | |
-Forces an immediate scan of the process table. | |
-.SH "EXIT CODES" | |
-.IX Header "EXIT CODES" | |
-.IP "Value 0: Exited gracefully" 4 | |
-.IX Item "Value 0: Exited gracefully" | |
-The program exited gracefully. | |
-.IP "Value 2: Failure to lookup \s-1UID\s0 for username" 4 | |
-.IX Item "Value 2: Failure to lookup UID for username" | |
-The username specified by the \-\-user command line option did not resolve to a valid | |
-\&\s-1UID\s0. | |
-.IP "Value 3: Configuration file is disabled" 4 | |
-.IX Item "Value 3: Configuration file is disabled" | |
-The configuration file is disabled. (It contains an active 'Disabled' directive). | |
-.IP "Value 4: Configuration file does not exist" 4 | |
-.IX Item "Value 4: Configuration file does not exist" | |
-The specified configuration file, (default or user specified) does not exist. | |
-.IP "Value 5: Unable to open \s-1PID\s0 file handle" 4 | |
-.IX Item "Value 5: Unable to open PID file handle" | |
-Failed to open a read-only file handle for the runtime \s-1PID\s0 file. | |
-.IP "Value 6: Failed to fork" 4 | |
-.IX Item "Value 6: Failed to fork" | |
-An error occured while attempting to fork the child background daemon process. | |
-.IP "Value 7: Unable to open \s-1PID\s0 file handle" 4 | |
-.IX Item "Value 7: Unable to open PID file handle" | |
-Failed to open a write file handle for the runtime \s-1PID\s0 file. | |
-.IP "Value 8: Failure to load Perl module" 4 | |
-.IX Item "Value 8: Failure to load Perl module" | |
-One or more Perl module could not be loaded. This usually happens when one of the | |
-required Perl modules which psmon depends upon is not installed or could not be located | |
-in the Perl \s-1LIB\s0 search path. | |
-.SH "PERFORMANCE" | |
-.IX Header "PERFORMANCE" | |
-psmon is not especially fast. Much of it's time is spent reading the process table. | |
-If the process table is particularly large this can take a number of seconds. | |
-Although is rarely a major problem on todays speedy machines, I have run a few tests | |
-so you take look at the times and decide if you can afford the wait. | |
-.PP | |
-.Vb 9 | |
-\& CPU OS Open Open Files/Procs 1m Load Real Time | |
-\& PIII 1.1G Mandrake 9.0 10148 / 267 0.01 0m0.430s | |
-\& PIII 1.2G Mandrake 9.0 16714 / 304 0.44 0m0.640s | |
-\& Celeron 500 Red Hat 6,1 1780 / 81 1.27 0m0.880s | |
-\& PII 450 Red Hat 6.0 300 / 23 0.01 0m1.050s | |
-\& 2x Xeon 1.8G Mandrake 9.0 90530 / 750 0.38 0m1.130s | |
-\& Celeron 500 Red Hat 6.1 1517 / 77 1.00 0m1.450s | |
-\& PIII 866 Red Hat 8.0 3769 / 76 0.63 0m1.662s | |
-\& PIII 750 Red Hat 6.2 754 / 35 3.50 0m2.170s | |
-.Ve | |
-.PP | |
-These production machines were running the latest patched stock distribution kernels. | |
-I have listed the total number of open file descriptors, processes running and 1 minute | |
-load average to give you a slightly better context of the performance. | |
-.SH "SUBROUTINES" | |
-.IX Header "SUBROUTINES" | |
-.IP "check_processtable($)" 4 | |
-.IX Item "check_processtable($)" | |
-Reads the current process table, checks and then executes any appropriate | |
-action to be taken. Does not accept any paramaters. | |
-.IP "\fIslay_process()\fR" 4 | |
-.IX Item "slay_process()" | |
-Attempts to kill a process with it's killcmd, or failing that using the \fIkill()\fR function. | |
-Accepts the process name, syslog log level, email notification to address and a reference | |
-to the \f(CW%slay\fR hash. | |
-.IP "\fIprint_init_style()\fR" 4 | |
-.IX Item "print_init_style()" | |
-Prints a Red Hat sysvinit style status message. Accepts an array of messages | |
-to display in sequence. | |
-.IP "\fIspawn_process()\fR" 4 | |
-.IX Item "spawn_process()" | |
-Attempts to spawn a process. Accepts the process name, syslog log level, mail | |
-notification to address and spawn command. | |
-.IP "\fIdisplay_help()\fR" 4 | |
-.IX Item "display_help()" | |
-Displays command line help. | |
-.IP "\fIread_config()\fR" 4 | |
-.IX Item "read_config()" | |
-Reads in runtime configuration options. | |
-.IP "\fIisnumeric()\fR" 4 | |
-.IX Item "isnumeric()" | |
-An evil bastard fudge to ensure that we're only dealing with numerics when | |
-necessary, from the config file and Proc::ProcessTable scan. | |
-.IP "\fIloglevel()\fR" 4 | |
-.IX Item "loglevel()" | |
-Accepts a syslog loglevel keyword and returns the associated constant integer. | |
-.IP "\fIlogfacility()\fR" 4 | |
-.IX Item "logfacility()" | |
-Accepts a syslog facility keyword and returns the associated constant integer. | |
-.IP "\fIalert()\fR" 4 | |
-.IX Item "alert()" | |
-Logs a message to syslog using \fIlog()\fR and sends a notification email using | |
-\&\fIsendmail()\fR. | |
-.IP "\fIlog()\fR" 4 | |
-.IX Item "log()" | |
-Logs messages to \s-1DAEMON\s0 facility in syslog. Accepts a log | |
-level and message array. Will terminate the process if it is | |
-asked to log a message of a log level 2 or less (\s-1LOG_EMERG\s0, | |
-\&\s-1LOG_ALERT\s0, \s-1LOG_CRIT\s0). | |
-.IP "\fIsendmail()\fR" 4 | |
-.IX Item "sendmail()" | |
-Sends email notifications of syslog messages, called by \fIalert()\fR. | |
-Accepts sending email address, recipient email address, short | |
-message subject and an optional detailed message body array. | |
-.IP "\fIdaemonize()\fR" 4 | |
-.IX Item "daemonize()" | |
-Launches the process in to the background. Checks to see if there is already an | |
-instance running. | |
-.IP "\fIdisplay_version()\fR" 4 | |
-.IX Item "display_version()" | |
-Displays complete version, author and license information. | |
-.SH "BUGS" | |
-.IX Header "BUGS" | |
-Hopefully none. ;\-) Send any bug reports to me at nicl@perlguy.org.uk | |
-along with any patches and details of how to replicate the problem. | |
-Please only send reports for bugs which can be replicated in the | |
-\&\fIlatest\fR version of the software. The latest version can always be | |
-found at http://psmon.perlguy.org.uk | |
-.SH "TODO" | |
-.IX Header "TODO" | |
-The following functionality will be added soon: | |
-.IP "Code cleanup" 4 | |
-.IX Item "Code cleanup" | |
-The code needs to be cleaned up and made more efficient. | |
-.IP "killperprocessname directive" 4 | |
-.IX Item "killperprocessname directive" | |
-Will accept a boolean value. If true, only 1 process per process scope | |
-will ever be killed, instead of all process IDs matching kill rules. | |
-This should be used in conjunction with the new killcmd directive. For | |
-example, you may define that a database daemon may never take up more | |
-than 90% \s-1CPU\s0 time, and it runs many children processes. If it exceeds | |
-90% \s-1CPU\s0 time, you want to issue \s-1ONE\s0 restart command in order to stop and | |
-then start all the database processes in one go. | |
-.IP "time period limited rules" 4 | |
-.IX Item "time period limited rules" | |
-Functionality to limit validity of process scopes to only be checked | |
-between defined time periods. For example, only check that httpd is running | |
-between the hours of 8am and 5pm on Mondays and Tuesdays. | |
-.SH "SEE ALSO" | |
-.IX Header "SEE ALSO" | |
-nsmon | |
-.SH "LICENSE" | |
-.IX Header "LICENSE" | |
-Written by Nicholas P Lawrence, <nicl@perlguy.org.uk>. | |
-Copyright (C) 2002,2003 Nicholas P Lawrence. | |
-.PP | |
-This program is free software; you can redistribute it and/or | |
-modify it under the terms of the \s-1GNU\s0 General Public License | |
-as published by the Free Software Foundation; either version 2 | |
-of the License, or (at your option) any later version. | |
-.PP | |
-This program is distributed in the hope that it will be useful, | |
-but \s-1WITHOUT\s0 \s-1ANY\s0 \s-1WARRANTY\s0; without even the implied warranty of | |
-\&\s-1MERCHANTABILITY\s0 or \s-1FITNESS\s0 \s-1FOR\s0 A \s-1PARTICULAR\s0 \s-1PURPOSE\s0. See the | |
-\&\s-1GNU\s0 General Public License for more details. | |
-.PP | |
-You should have received a copy of the \s-1GNU\s0 General Public License | |
-along with this program; if not, write to the Free Software | |
-Foundation, Inc., 59 Temple Place \- Suite 330, Boston, \s-1MA\s0 02111\-1307, \s-1USA\s0. | |
-.SH "AUTHOR" | |
-.IX Header "AUTHOR" | |
-PerlGuy <nicl@perlguy.org.uk> | |
-.PP | |
-http://perlguy.org.uk/perl_guy/ | |
diff --git a/psmon-1.0.4/psmon.conf b/psmon-1.0.4/psmon.conf | |
deleted file mode 100644 | |
index 827a761..0000000 | |
--- a/psmon-1.0.4/psmon.conf | |
+++ /dev/null | |
@@ -1,251 +0,0 @@ | |
-############################################################ | |
-# $Id: psmon.conf,v 1.17 2003/03/25 14:22:33 nicl Exp $ | |
-# psmon.conf - Example psmon Configuration File | |
-# Copyright: (c)2002,2003 Nic Lawrence. All rights reserved. | |
-############################################################ | |
-# This file is part of psmon. | |
-# | |
-# psmon is free software; you can redistribute it and/or modify | |
-# it under the terms of the GNU General Public License as published by | |
-# the Free Software Foundation; either version 2 of the License, or | |
-# (at your option) any later version. | |
-# | |
-# psmon is distributed in the hope that it will be useful, | |
-# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
-# GNU General Public License for more details. | |
-# | |
-# You should have received a copy of the GNU General Public License | |
-# along with psmon; if not, write to the Free Software | |
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
-############################################################ | |
- | |
-# | |
-# Please read through this configuration file in detail. It | |
-# will NOT function right out of the box without any | |
-# modifications. This is for good reason, since I don't want | |
-# to receive snotty emails from you or your system | |
-# administrator, being accused of killing your server or | |
-# workstation. | |
-# | |
-# There is further documentation supplied with the psmon | |
-# software. I suggest that you read it thoroughly. | |
-# | |
-# - The author, Nic Lawrence | |
-# | |
- | |
- | |
- | |
-# Defines the email address where notification emails should be sent | |
-# to. Defaults to root@localhost. | |
-# | |
-# Please change this to your own email address. I will not be too | |
-# appreciative of receiving notifications about your quake server | |
-# and eggdrops not running!! | |
-# NotifyEmail nicl@perlguy.org.uk | |
- | |
-# Defines the IP address or hostname of the SMTP server to used to | |
-# send email notifications. Defaults to localhost | |
-# SmtpHost mail.tfb.net | |
- | |
-# Defines the frequency of process table queries. Defaults to 60 seconds. | |
-Frequency 90 | |
- | |
-# When defined, psmon will never attempt to kill a process ID which | |
-# is numerically less than or equal to the value defined by last | |
-# safepid. It should be noted that psmon will never attempt to kill a | |
-# process ID less than or equal to 1, or itself. Defaults to 100. | |
-LastSafePID 800 | |
- | |
-# Accepts a boolean value of On or Off. Surpresses all notifications | |
-# from of preserved process IDs when used in conjunction with the | |
-# lastsafepid directive. Defaults to Off. | |
-ProtectSafePIDsQuietly Off | |
- | |
-# Forces this psmon to as if the --dryrun command line switch had | |
-# specified. This is useful if you want to force a specific | |
-# configuration file to only report and never actually take any | |
-# automated action. | |
-# | |
-# This is enabled in this default distribution configuration in | |
-# order to prevent people from blindly executing psmon "out of the | |
-# box" and causing damage in live environments. Yes, such stupid | |
-# people do really exist! | |
-DryRun True | |
- | |
- | |
- | |
-# The <Process *> scope is commented out by default. It should | |
-# be used with *EXTREME* care. If you do decide to use it, may I | |
-# suggest that you run psmon in 'DryRun' mode by adding the | |
-# 'DryRun' directive in this configuration file. READ THE | |
-# DOCUMENTATION THOROUGHLY BEFORE ENABLING THIS FEATURE!!! | |
- | |
-#<Process *> | |
-# PctCpu 80 | |
-# PctMem 50 | |
-#</Process> | |
- | |
- | |
- | |
-# I have included a set of commonly required processes. They | |
-# are all vital services which must be running on all of my | |
-# workstations and servers. It's a pretty good guess you'll | |
-# want them to always be running too. | |
- | |
-# Secure Shell Daemon | |
-<Process sshd> | |
- LogLevel LOG_CRITICAL | |
- SpawnCmd /sbin/service sshd restart | |
- PidFile /var/run/sshd.pid | |
- # Instances 30 | |
- # PctCPU 90 | |
-</Process> | |
- | |
-# Cron Daemon | |
-<Process crond> | |
- spawncmd /sbin/service crond restart | |
- pidfile /var/run/crond.pid | |
-</Process> | |
- | |
-# System Logger Daemon | |
-<Process syslogd> | |
- spawncmd /sbin/service syslog restart | |
- pidfile /var/run/syslogd.pid | |
-</Process> | |
- | |
-# Internet Super Daemon | |
-<Process xinetd> | |
- spawncmd /sbin/service xinetd restart | |
- pidfile /var/run/xinetd.pid | |
-</Process> | |
- | |
-# Remote WHO Daemon | |
-<Process rwhod> | |
- # rwhod is *EVIL*! There is almost never any real | |
- # reason why you would ever want to run such pants! | |
- killcmd /sbin/service rwhod stop | |
- ttl 1 | |
-</Process> | |
- | |
-# BIND DNS Daemon | |
-#<Process named> | |
-# spawncmd /sbin/service named start | |
-# pidfile /var/run/named.pid | |
-#</Process> | |
- | |
-# Exim SMTP Mail Daemon | |
-#<Process exim> | |
-# spawncmd /sbin/service exim restart | |
-# pidfile /var/run/exim.pid | |
-# # instamces 30 | |
-# # pctcpu 90 | |
-#</Process> | |
- | |
-# Sendmail SMTP Mail Daemon | |
-#<Process sendmail> | |
-# spawncmd /sbin/service sendmail start | |
-# pidfile /var/run/sendmail.pid | |
-#</Process> | |
- | |
-# Samba SMB File Sharing Daemon | |
-#<Process smbd> | |
-# spawncmd /sbin/service smbd restart | |
-# pidfile /var/run/samba/smbd.pid | |
-#</Process> | |
-#<Process nmbd> | |
-# spawncmd /sbin/service smbd restart | |
-# pidfile /var/run/samba/nmbd.pid | |
-#</Process> | |
- | |
-# Quallcomm QPopper POP3 Daemon | |
-#<Process popper> | |
-# spawncmd /sbin/service popper restart | |
-# pidfile /var/run/popper.pid | |
-#</Process> | |
- | |
-# Apache Group HTTP Daemon | |
-#<Process httpd> | |
-# spawncmd /sbin/service httpd restart | |
-# pidfile /var/run/httpd.pid | |
-# # instances 200 | |
-# # pctcpu 80 | |
-#</Process> | |
- | |
-# MySQL Database | |
-#<Process mysqld> | |
-# spawncmd /sbin/service mysqld restart | |
-# killcmd /sbin/service mysqld stop | |
-# pidfile /var/run/mysqld/mysqld.pid | |
-# # pctcpu 90 | |
-# # pctmem 60 | |
-#</Process> | |
- | |
-# NTP Time Daemon | |
-#<Process ntpd> | |
-# spawncmd /sbin/service ntpd restart | |
-#</Process> | |
- | |
-# SMNP Daemon | |
-#<Process snmpd> | |
-# | |
-#</Process> | |
- | |
-# ProFTPD FTP Daemon | |
-#<Process proftpd> | |
-# spawncmd /sbin/service proftpd restart | |
-# pidfile /var/run/proftpd.pid | |
-#</Processes> | |
- | |
-# wu-ftpd Daemon | |
-# In RedHat 8.0 (which is what I am developing psmon under), | |
-# wu-ftpd is spawned from xinetd on demand, and so may not | |
-# always be running. I have only put this comment in because | |
-# people have asked me why there isn't an example for wu-ftpd | |
-# in the distribution psmon.conf. -- Now you know. ;-) | |
- | |
- | |
- | |
-# These are processes which run frequently on my machines, but | |
-# I have had experience of either running for too long (for | |
-# whatever readon), or spawning too many copies. | |
- | |
-# The following is a quick table for your ease of reference: | |
-# Seconds Minutes Hours Days Weeks | |
-# 60 1 | |
-# 3600 60 1 | |
-# 43200 720 12 0.5 | |
-# 86400 1440 24 1 | |
-# 604800 10080 168 7 1 | |
- | |
-# Kill excessive of slothenly rsync processes | |
-<Process rsync> | |
- ttl 43200 | |
- instances 5 | |
-</Process> | |
- | |
-# Kill excessive of slothenly updatedb processes | |
-<Process updatedb> | |
- ttl 43200 | |
- instances 2 | |
-</Process> | |
- | |
-# Kill excessive of slothenly find processes | |
-<Process find> | |
- ttl 86400 | |
- instances 30 | |
-</Process> | |
- | |
- | |
- | |
-# Remove this line to activate this configuration file. | |
-Disabled True | |
- | |
-# PLEASE READ THE DOCUMENTATION BEFORE USING PSMON!!!!! | |
-# You can do so by typing "man psmon", or "perldoc /sbin/psmon" | |
- | |
- | |
- | |
-### the end | |
- | |
- | |
diff --git a/psmon-1.0.4/psmon.html b/psmon-1.0.4/psmon.html | |
deleted file mode 100644 | |
index f389095..0000000 | |
--- a/psmon-1.0.4/psmon.html | |
+++ /dev/null | |
@@ -1,736 +0,0 @@ | |
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |
-<html xmlns="http://www.w3.org/1999/xhtml"> | |
-<head> | |
-<title>psmon - Process Table Monitoring Script</title> | |
-<link rel="stylesheet" href="perldoc.css" type="text/css" /> | |
-<link rev="made" href="mailto:root@localhost" /> | |
-</head> | |
- | |
-<body> | |
- | |
-<p><a name="__index__"></a></p> | |
-<!-- INDEX BEGIN --> | |
- | |
-<ul> | |
- | |
- <li><a href="#name">NAME</a></li> | |
- <li><a href="#version">VERSION</a></li> | |
- <li><a href="#synopsis">SYNOPSIS</a></li> | |
- <li><a href="#description">DESCRIPTION</a></li> | |
- <li><a href="#operation">OPERATION</a></li> | |
- <li><a href="#installation">INSTALLATION</a></li> | |
- <li><a href="#configuration">CONFIGURATION</a></li> | |
- <ul> | |
- | |
- <li><a href="#directives">DIRECTIVES</a></li> | |
- <li><a href="#process_scope_directives">PROCESS SCOPE DIRECTIVES</a></li> | |
- <li><a href="#examples">EXAMPLES</a></li> | |
- </ul> | |
- | |
- <li><a href="#signals">SIGNALS</a></li> | |
- <li><a href="#exit_codes">EXIT CODES</a></li> | |
- <li><a href="#performance">PERFORMANCE</a></li> | |
- <li><a href="#subroutines">SUBROUTINES</a></li> | |
- <li><a href="#bugs">BUGS</a></li> | |
- <li><a href="#todo">TODO</a></li> | |
- <li><a href="#see_also">SEE ALSO</a></li> | |
- <li><a href="#license">LICENSE</a></li> | |
- <li><a href="#author">AUTHOR</a></li> | |
-</ul> | |
-<!-- INDEX END --> | |
- | |
-<hr /> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="name">NAME</a></h1> | |
-<p>psmon - Process Table Monitoring Script</p> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="version">VERSION</a></h1> | |
-<p>$Id: psmon.html,v 1.2 2003/03/24 18:00:59 nicl Exp $</p> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="synopsis">SYNOPSIS</a></h1> | |
-<p>Single user account crontab operation.</p> | |
-<pre> | |
- # DO NOT EDIT THIS FILE - edit the master and reinstall. | |
- # (/tmp/crontab.28945 installed on Wed Jan 8 16:29:24 2003) | |
- # (Cron version -- $Id: psmon.html,v 1.2 2003/03/24 18:00:59 nicl Exp $) | |
- MAILTO="nicl@perlguy.org.uk" | |
- USER=nicl | |
- | |
- */5 * * * * /sbin/psmon --daemon --cron --conf=~/etc/psmon.conf --user=$USER --adminemail=nicl@perlguy.org.uk</pre> | |
-<p>Regular system-wide call from cron:</p> | |
-<pre> | |
- */5 * * * * /sbin/psmon --daemon --cron</pre> | |
-<p>Only check processes during working office hours:</p> | |
-<pre> | |
- * 9-17 * * * /sbin/psmon</pre> | |
-<p>Command line syntax.</p> | |
-<pre> | |
- [nicl@nicl]$ psmon --help | |
- Syntax: psmon [--conf=filename] [--daemon] [--cron] [--user=user] | |
- [--adminemail=emailaddress] [--dryrun] [--help] [--version] | |
- --help Display this help | |
- --version Display full version information | |
- --dryrun Dryrun (do not actually kill or spawn and processes) | |
- --daemon Spawn in to background daemon | |
- --cron Disables 'already running' errors with the --daemon option | |
- --conf=str Specify alternative config filename | |
- --user=str Only scan the process table for processes running as str | |
- --adminemail=str Force all notification emails to be sent to str</pre> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="description">DESCRIPTION</a></h1> | |
-<p>This script monitors the process table using Proc::ProcessTable, and | |
-will respawn or kill processes based on a set of rules defined in an | |
-Apache style configuration file.</p> | |
-<p>Processes will be respawned if a spawn command is defined for a process, | |
-and no occurances of that process are running. If the --user command line | |
-option is specified, then the process will only be spawned if no instances | |
-are running as the specified userid.</p> | |
-<p>Processes can be killed off if they have been running for too long, | |
-use too much CPU or memory resources, or have too many concurrent | |
-versions running. Exceptions can be made to kill rulesets using the | |
-<em>pidfile</em> and <em>lastsafepid</em> directives.</p> | |
-<p>If a PID file is declared for a process, psmon will never kill the | |
-process ID that is contained within the pid file. This is useful if for | |
-example, you have a script which spawns hundreds of child processes | |
-which you may need to automatically kill, but you do not want to kill | |
-the parent process.</p> | |
-<p>Any actions performed will be logged to the DAEMON syslog facility by default. | |
-There is support to optionally also send notifications emails to an | |
-administrator on a global or pre-rule basis.</p> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="operation">OPERATION</a></h1> | |
-<dl> | |
-<dt><strong><a name="item_%2d%2ddryrun">--dryrun</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Execute a dry-run (do not actually kill or spawn and processes). | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_%2d%2dconf%3dfilename">--conf=<em>filename</em></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Specify alternative config filename. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_%2d%2ddaemon">--daemon</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Spawn in to background daemon. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_%2d%2dcron">--cron</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Disables already running warnings when trying to launch as another daemon. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_%2d%2duser%3duser">--user=<em>user</em></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Only scan the process table for processes running under this username. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_%2d%2dadminemail%3demailaddress">--adminemail=<em>emailaddress</em></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Force all notification emails to be sent to this email address. | |
-</dd> | |
-<p></p></dl> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="installation">INSTALLATION</a></h1> | |
-<p>In addition to Perl 5.005_03 or higher, the following Perl modules are | |
-required:</p> | |
-<pre> | |
- Getopt::Long | |
- Config::General | |
- POSIX | |
- Proc::ProcessTable | |
- Net::SMTP | |
- Unix::Syslog</pre> | |
-<p>The POSIX module is usually supplied with Perl as standard, as is | |
-Getopt::Long. All these modules can be obtained from CPAN. Visit | |
-<a href="http://search.span.org">http://search.span.org</a> and <a href="http://www.cpan.org">http://www.cpan.org</a> for further details. | |
-For the lazy people reading this, you can try the | |
-following command to install these modules:</p> | |
-<pre> | |
- for m in Getopt::Long Config::General POSIX Proc::ProcessTable \ | |
- Net::SMTP Unix::Syslog;do perl -MCPAN -e"install $m";done</pre> | |
-<p>Alternatively you can run the install.sh script which comes in the | |
-distribution tarball. It will attempt to install the right modules, | |
-install the script and configuration file, and generate UNIX man page | |
-documentation.</p> | |
-<p>By default psmon will look for its runtime configuration in /etc/psmon.conf, | |
-although this can be defined as otherwise from the command line. For system | |
-wide installations it is reccomended that you install your psmon in to the | |
-default location.</p> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="configuration">CONFIGURATION</a></h1> | |
-<p>The default configuration file location is /etc/psmon.conf. A different | |
-configuration file can be declared from the command line.</p> | |
-<p>Syntax of the configuration file is based upon that which is used by | |
-Apache. Each process to be monitored is declared with a Process scope | |
-directive like this example which monitors the OpenSSH daemon:</p> | |
-<pre> | |
- <Process sshd> | |
- spawncmd /sbin/service sshd start | |
- pidfile /var/run/sshd.pid | |
- instances 50 | |
- pctcpu 90 | |
- </Process></pre> | |
-<p>There is a special <em>*</em> process scope which applies to <em>all</em> running | |
-processes. This special scope should be used with extreme care. It does | |
-not support the use of the <em>spawncmd</em>, <em>pidfile</em>, <em>instances</em> or <em>ttl</em> | |
-directivers. A typical example of this scope might be as follows:</p> | |
-<pre> | |
- <Process *> | |
- pctcpu 95 | |
- pctmem 80 | |
- </Process></pre> | |
-<p>Global directives which are not specific to any one process should be placed | |
-outside of any Process scopes.</p> | |
-<p> | |
-</p> | |
-<h2><a name="directives">DIRECTIVES</a></h2> | |
-<dl> | |
-<dt><strong><a name="item_facility">Facility</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines which syslog facility to log to. Valid options are as follows; | |
-LOG_KERN, LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_SYSLOG, LOG_LPR, | |
-LOG_NEWS, LOG_UUCP, LOG_CRON, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, | |
-LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6 and LOG_LOCAL7. Defaults | |
-to LOG_DAEMON. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_loglevel">LogLevel</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the loglevel priority that notifications to syslog will be | |
-marked as. Valid options are as follows; LOG_EMERG, LOG_ALERT, LOG_CRIT, | |
-LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO and LOG_DEBUG. The log level | |
-used by a notification for any failed action will automatically be | |
-raised to the next level in order to highlight the failure. May be also be used | |
-in a Process scope which will take priority over a global declaration. | |
-Defaults to LOG_NOTICE. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_killloglevel">KillLogLevel (previously KillPIDLogLevel)</a></strong><br /> | |
-</dt> | |
-<dd> | |
-The same as the loglevel directive, but only applies to process kill actions. | |
-Takes priority over the loglevel directive. May be also be used in a | |
-Process scope which will take priority over a global declaration. | |
-Undefined by default. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_spawnloglevel">SpawnLogLevel</a></strong><br /> | |
-</dt> | |
-<dd> | |
-The same as the loglevel directive, but only applies to process spawn actions. | |
-Takes priority over the loglevel directive. May be also be used in a | |
-Process scope which will take priority over a global declaration. | |
-Undefined by default. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_adminemail">AdminEmail</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the email address where notification emails should be sent to. | |
-May be also be used in a Process scope which will take priority over a | |
-global declaration. Defaults to root@localhost. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_notifyemailfrom">NotifyEmailFrom</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the email address that notification email should be addresses | |
-from. Defaults to <username>@<em>hostname</em>. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_frequency">Frequency</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the frequency of process table queries. Defaults to 60 seconds. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_lastsafepid">LastSafePID</a></strong><br /> | |
-</dt> | |
-<dd> | |
-When defined, psmon will never attempt to kill a process ID which is | |
-numerically less than or equal to the value defined by lastsafepid. It | |
-should be noted that psmon will never attempt to kill itself, or a process ID | |
-less than or equal to 1. Defaults to 100. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_protectsafepidsquietly">ProtectSafePIDsQuietly</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Accepts a boolean value of On or Off. Surpresses all notifications of | |
-preserved process IDs when used in conjunction with the <em>lastsafepid</em> | |
-directive. Defaults to Off. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_smtphost">SMTPHost</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the IP address or hostname of the SMTP server to used to send | |
-email notifications. Defaults to localhost. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_smtptimeout">SMTPTimeout</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the timeout in seconds to be used during SMTP connections. | |
-Defaults to 20 seconds. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_sendmailcmd">SendmailCmd</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the sendmail command to use to send notification emails if there | |
-is a failure with the SMTP connection to the host defined by smtphost. | |
-Defaults to '/usr/sbin/sendmail -t'. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_dryrun">Dryrun</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Forces this psmon to as if the --dryrun command line switch had specified. | |
-This is useful if you want to force a specific configuration file to only | |
-report and never actually take any automated action. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_notifydetail">NotifyDetail</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the verbosity of notification emails which are sent. Can be set | |
-to 'Simple', 'Verbose' or 'Debug'. Defaults to 'Verbose'. This function | |
-will be removed soon. It is unnecessary bloat and is not very portable. | |
-</dd> | |
-<p></p></dl> | |
-<p> | |
-</p> | |
-<h2><a name="process_scope_directives">PROCESS SCOPE DIRECTIVES</a></h2> | |
-<dl> | |
-<dt><strong><a name="item_spawncmd">SpawnCmd</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the full command line to be executed in order to respawn a dead | |
-process. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_killcmd">KillCmd</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the full command line to be executed in order to gracefully | |
-shutdown or kill a rogue process. If the command returns a boolean true | |
-exit status then it is assumed that the command failed to execute | |
-sucessfully. If no KillCmd is specified or the command fails, the | |
-process will be killed by sending a SIGKILL signal with the standard | |
-<code>kill()</code> function. Undefined by default. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_pidfile">PIDFile</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines the full path and filename of a file created by a process which | |
-contain it's main parent process ID. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_ttl">TTL</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines a maximum time to live (in seconds) of a process. The process | |
-will be killed once it has been running longer than this value, and | |
-it's process ID isn't contained in the defined pidfile. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_pctcpu">PctCpu</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines a maximum allowable percentage of CPU time a process may use. | |
-The process will be killed once it's CPU usage exceeds this threshold | |
-and it's process ID isn't contained in the defined pidfile. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_pctmem">PctMem</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines a maximum allowable percentage of total system memory a process | |
-may use. The process will be killed once it's memory usage exceeds this | |
-threshold and it's process ID isn't contained in the defined pidfile. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_instances">Instances</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Defines a maximum number of instances of a process which may run. The | |
-process will be killed once there are more than this number of occurances | |
-running, and it's process ID isn't contained in the defined pid file. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_noemailonkill">NoEmailOnKill</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Accepts a boolean value of True or False. Surpresses process killing | |
-notification emails for this process scope. Defaults to False. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_noemailonspawn">NoEmailOnSpawn</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Accepts a boolean value of True or False. Surpresses process spawning | |
-notification emails for this process scope. Defaults to False. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_noemail">NoEmail</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Accepts a boolean value of True or False. Surpresses all notification | |
-emails for this process scope. Defaults to False. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_neverkillpid">NeverKillPID</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Accepts a space delimited list of PIDs which will never be killed. | |
-Defaults to 1. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_neverkillprocessname">NeverKillProcessName</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Accepts a space deliomited list of process names which will never be | |
-killed. Defaults to 'kswapd kupdated mdrecoveryd'. | |
-</dd> | |
-<p></p></dl> | |
-<p> | |
-</p> | |
-<h2><a name="examples">EXAMPLES</a></h2> | |
-<pre> | |
- <Process syslogd> | |
- spawncmd /sbin/service syslogd restart | |
- pidfile /var/run/syslogd.pid | |
- instances 1 | |
- pctcpu 70 | |
- pctmem 30 | |
- </Process></pre> | |
-<p>Syslog is a good example of a process which can get a little full | |
-of itself under certian circumstances, and excessively hog CPU and | |
-memory. Here we will kill off syslogd processes if it exceeds 70% | |
-CPU or 30% memory utilization.</p> | |
-<p>Older running copies of syslogd will be killed if they are running, | |
-while leaving the most recently spawned copy which will be listed in | |
-the PID file defined.</p> | |
-<pre> | |
- <Process httpd> | |
- spawncmd /sbin/service httpd restart | |
- pidfile /var/run/httpd.pid | |
- loglevel critical | |
- adminemail pager@noc.company.com | |
- </Process></pre> | |
-<p>Here we are monitoring Apache to ensure that it is restarted if | |
-it dies. The pidfile directive in this example is actually | |
-redundant because we have not defined any rule where we should | |
-consider killing any httpd processes.</p> | |
-<p>All notifications relating to this process will be logged with the | |
-syslog priority of critical (LOG_CRIT), and all emailed to | |
-<a href="mailto:pager@noc.company.com">pager@noc.company.com</a> which could typically forward to a pager.</p> | |
-<p>Any failed attempts to kill or restart a process will automatically | |
-be logged as a syslog priority one level higher than that specified. | |
-If a restart of Apache were to fail in this example, a wall | |
-notification would be broadcast to all interactive terminals | |
-connected to the machine, since the next log priority up from | |
-LOG_CRIT is LOG_EMERG.</p> | |
-<pre> | |
- <Process find> | |
- noemail True | |
- ttl 3600 | |
- </Process></pre> | |
-<p>Kill old find processes which have been running for over an hour. | |
-Do not send an email notification since it's not too important.</p> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="signals">SIGNALS</a></h1> | |
-<dl> | |
-<dt><strong><a name="item_hup">HUP</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Forces an immediate reload of the configuration file. You should | |
-send the HUP signal when you are running psmon as a background | |
-daemon and have altered the psmon.conf file. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_usr1">USR1</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Forces an immediate scan of the process table. | |
-</dd> | |
-<p></p></dl> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="exit_codes">EXIT CODES</a></h1> | |
-<dl> | |
-<dt><strong><a name="item_value_0%3a_exited_gracefully">Value 0: Exited gracefully</a></strong><br /> | |
-</dt> | |
-<dd> | |
-The program exited gracefully. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_value_2%3a_failure_to_lookup_uid_for_username">Value 2: Failure to lookup UID for username</a></strong><br /> | |
-</dt> | |
-<dd> | |
-The username specified by the --user command line option did not resolve to a valid | |
-UID. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_value_3%3a_configuration_file_is_disabled">Value 3: Configuration file is disabled</a></strong><br /> | |
-</dt> | |
-<dd> | |
-The configuration file is disabled. (It contains an active 'Disabled' directive). | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_value_4%3a_configuration_file_does_not_exist">Value 4: Configuration file does not exist</a></strong><br /> | |
-</dt> | |
-<dd> | |
-The specified configuration file, (default or user specified) does not exist. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_value_5%3a_unable_to_open_pid_file_handle">Value 5: Unable to open PID file handle</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Failed to open a read-only file handle for the runtime PID file. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_value_6%3a_failed_to_fork">Value 6: Failed to fork</a></strong><br /> | |
-</dt> | |
-<dd> | |
-An error occured while attempting to fork the child background daemon process. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_value_7%3a_unable_to_open_pid_file_handle">Value 7: Unable to open PID file handle</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Failed to open a write file handle for the runtime PID file. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_value_8%3a_failure_to_load_perl_module">Value 8: Failure to load Perl module</a></strong><br /> | |
-</dt> | |
-<dd> | |
-One or more Perl module could not be loaded. This usually happens when one of the | |
-required Perl modules which psmon depends upon is not installed or could not be located | |
-in the Perl LIB search path. | |
-</dd> | |
-<p></p></dl> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="performance">PERFORMANCE</a></h1> | |
-<p>psmon is not especially fast. Much of it's time is spent reading the process table. | |
-If the process table is particularly large this can take a number of seconds. | |
-Although is rarely a major problem on todays speedy machines, I have run a few tests | |
-so you take look at the times and decide if you can afford the wait.</p> | |
-<pre> | |
- CPU OS Open Open Files/Procs 1m Load Real Time | |
- PIII 1.1G Mandrake 9.0 10148 / 267 0.01 0m0.430s | |
- PIII 1.2G Mandrake 9.0 16714 / 304 0.44 0m0.640s | |
- Celeron 500 Red Hat 6,1 1780 / 81 1.27 0m0.880s | |
- PII 450 Red Hat 6.0 300 / 23 0.01 0m1.050s | |
- 2x Xeon 1.8G Mandrake 9.0 90530 / 750 0.38 0m1.130s | |
- Celeron 500 Red Hat 6.1 1517 / 77 1.00 0m1.450s | |
- PIII 866 Red Hat 8.0 3769 / 76 0.63 0m1.662s | |
- PIII 750 Red Hat 6.2 754 / 35 3.50 0m2.170s</pre> | |
-<p>These production machines were running the latest patched stock distribution kernels. | |
-I have listed the total number of open file descriptors, processes running and 1 minute | |
-load average to give you a slightly better context of the performance.</p> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="subroutines">SUBROUTINES</a></h1> | |
-<dl> | |
-<dt><strong><a name="item_check_processtable"><code>check_processtable($)</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Reads the current process table, checks and then executes any appropriate | |
-action to be taken. Does not accept any paramaters. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_slay_process"><code>slay_process()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Attempts to kill a process with it's killcmd, or failing that using the <code>kill()</code> function. | |
-Accepts the process name, syslog log level, email notification to address and a reference | |
-to the %slay hash. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_print_init_style"><code>print_init_style()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Prints a Red Hat sysvinit style status message. Accepts an array of messages | |
-to display in sequence. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_spawn_process"><code>spawn_process()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Attempts to spawn a process. Accepts the process name, syslog log level, mail | |
-notification to address and spawn command. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_display_help"><code>display_help()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Displays command line help. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_read_config"><code>read_config()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Reads in runtime configuration options. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_isnumeric"><code>isnumeric()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-An evil bastard fudge to ensure that we're only dealing with numerics when | |
-necessary, from the config file and Proc::ProcessTable scan. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_loglevel"><code>loglevel()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Accepts a syslog loglevel keyword and returns the associated constant integer. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_logfacility"><code>logfacility()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Accepts a syslog facility keyword and returns the associated constant integer. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_alert"><code>alert()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Logs a message to syslog using <a href="#item_log"><code>log()</code></a> and sends a notification email using | |
-sendmail(). | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_log"><code>log()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Logs messages to DAEMON facility in syslog. Accepts a log | |
-level and message array. Will terminate the process if it is | |
-asked to log a message of a log level 2 or less (LOG_EMERG, | |
-LOG_ALERT, LOG_CRIT). | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_sendmail"><code>sendmail()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Sends email notifications of syslog messages, called by alert(). | |
-Accepts sending email address, recipient email address, short | |
-message subject and an optional detailed message body array. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_daemonize"><code>daemonize()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Launches the process in to the background. Checks to see if there is already an | |
-instance running. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_display_version"><code>display_version()</code></a></strong><br /> | |
-</dt> | |
-<dd> | |
-Displays complete version, author and license information. | |
-</dd> | |
-<p></p></dl> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="bugs">BUGS</a></h1> | |
-<p>Hopefully none. ;-) Send any bug reports to me at <a href="mailto:nicl@perlguy.org.uk">nicl@perlguy.org.uk</a> | |
-along with any patches and details of how to replicate the problem. | |
-Please only send reports for bugs which can be replicated in the | |
-<em>latest</em> version of the software. The latest version can always be | |
-found at <a href="http://psmon.perlguy.org.uk">http://psmon.perlguy.org.uk</a></p> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="todo">TODO</a></h1> | |
-<p>The following functionality will be added soon:</p> | |
-<dl> | |
-<dt><strong><a name="item_code_cleanup">Code cleanup</a></strong><br /> | |
-</dt> | |
-<dd> | |
-The code needs to be cleaned up and made more efficient. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_killperprocessname_directive">killperprocessname directive</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Will accept a boolean value. If true, only 1 process per process scope | |
-will ever be killed, instead of all process IDs matching kill rules. | |
-This should be used in conjunction with the new killcmd directive. For | |
-example, you may define that a database daemon may never take up more | |
-than 90% CPU time, and it runs many children processes. If it exceeds | |
-90% CPU time, you want to issue ONE restart command in order to stop and | |
-then start all the database processes in one go. | |
-</dd> | |
-<p></p> | |
-<dt><strong><a name="item_time_period_limited_rules">time period limited rules</a></strong><br /> | |
-</dt> | |
-<dd> | |
-Functionality to limit validity of process scopes to only be checked | |
-between defined time periods. For example, only check that httpd is running | |
-between the hours of 8am and 5pm on Mondays and Tuesdays. | |
-</dd> | |
-<p></p></dl> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="see_also">SEE ALSO</a></h1> | |
-<p>nsmon</p> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="license">LICENSE</a></h1> | |
-<p>Written by Nicholas P Lawrence, <<a href="mailto:nicl@perlguy.org.uk">nicl@perlguy.org.uk</a>>. | |
-Copyright (C) 2002,2003 Nicholas P Lawrence.</p> | |
-<p>This program is free software; you can redistribute it and/or | |
-modify it under the terms of the GNU General Public License | |
-as published by the Free Software Foundation; either version 2 | |
-of the License, or (at your option) any later version.</p> | |
-<p>This program is distributed in the hope that it will be useful, | |
-but WITHOUT ANY WARRANTY; without even the implied warranty of | |
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
-GNU General Public License for more details.</p> | |
-<p>You should have received a copy of the GNU General Public License | |
-along with this program; if not, write to the Free Software | |
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</p> | |
-<p> | |
-</p> | |
-<hr /> | |
-<h1><a name="author">AUTHOR</a></h1> | |
-<p>PerlGuy <<a href="mailto:nicl@perlguy.org.uk">nicl@perlguy.org.uk</a>></p> | |
-<p><a href="http://perlguy.org.uk/perl_guy/">http://perlguy.org.uk/perl_guy/</a></p> | |
- | |
-</body> | |
- | |
-</html> | |
diff --git a/psmon-1.29/support/install.sh b/psmon-1.29/support/install.sh | |
new file mode 100755 | |
index 0000000..9176df3 | |
--- /dev/null | |
+++ b/psmon-1.29/support/install.sh | |
@@ -0,0 +1,150 @@ | |
+#!/bin/sh | |
+############################################################ | |
+# $Id: install.sh,v 1.9 2005/05/06 14:11:06 nicolaw Exp $ | |
+# install.sh - Installation script for psmon | |
+# Copyright: (c)2002,2003 Nicola Worthington. All rights reserved. | |
+############################################################ | |
+# This file is part of psmon. | |
+# | |
+# psmon is free software; you can redistribute it and/or modify | |
+# it under the terms of the GNU General Public License as published by | |
+# the Free Software Foundation; either version 2 of the License, or | |
+# (at your option) any later version. | |
+# | |
+# psmon is distributed in the hope that it will be useful, | |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
+# GNU General Public License for more details. | |
+# | |
+# You should have received a copy of the GNU General Public License | |
+# along with psmon; if not, write to the Free Software | |
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
+############################################################ | |
+ | |
+Target="/usr/bin" | |
+ | |
+if ! [ -f support/psmon.html ] && [ -f psmon.html ] && [ -f ../Makefile.PL ] | |
+then | |
+ cd .. | |
+fi | |
+ | |
+for dm in wget lwp-download ncftpget | |
+do | |
+ if which $dm > /dev/null 2>&1 | |
+ then | |
+ Download=$dm | |
+ fi | |
+done | |
+ | |
+# Check we have all the right perl modules installed. Try and | |
+# install them from the tarballs provided if necessary. | |
+echo "Config General 2.27,Proc ProcessTable 0.39,Unix Syslog 0.99,Getopt Long 2.34," | \ | |
+ while read -d',' Group Name Version | |
+do | |
+ m="$Group::$Name" | |
+ mf="$Group-$Name-$Version.tar.gz" | |
+ md="$Group-$Name" | |
+ echo -n "Checking for $m ... " | |
+ if perl -e '$m = shift; eval("use $m;"); exit 1 if $@;' $m | |
+ then | |
+ echo "found" | |
+ else | |
+ echo "missing" | |
+ if [ "X$Download" != "X" ] | |
+ then | |
+ echo "Attempting to download $mf using $Download ..." | |
+ $Download ftp://ftp.funet.fi/pub/languages/perl/CPAN/modules/by-module/$Group/$mf | |
+ if [ -f $mf ] | |
+ then | |
+ echo "Attempting to install $m from $mf ..." | |
+ tar -zxf $mf | |
+ if cd $md-* > /dev/null 2>&1 | |
+ then | |
+ perl Makefile.PL && make && make test && make install | |
+ cd .. | |
+ else | |
+ echo "Failed to install $m from $mf; could not file extraction directory" | |
+ fi | |
+ else | |
+ echo "Failed to download $mf" | |
+ fi | |
+ fi | |
+ fi | |
+done | |
+ | |
+# Install psmon | |
+if [ -e bin/psmon ] | |
+then | |
+ # Remove any old version of psmon | |
+ for file in psmon psmon-config | |
+ do | |
+ if which $file > /dev/null 2>&1 | |
+ then | |
+ oldfile=`which $file` | |
+ bakfile=`date +"$oldfile-%Y%m%d%H%M%S"` | |
+ echo -n "Moving old $file $oldfile to $bakfile ... " | |
+ mv $oldfile $bakfile | |
+ if [ -e $bakfile ]; then echo "done"; else echo "failed"; fi | |
+ fi | |
+ | |
+ # Install the new psmon script | |
+ echo -n "Installing $file ... " | |
+ cp bin/$file $Target/ | |
+ if [ -e $Target/$file ]; then | |
+ echo "done" | |
+ chmod 755 $Target/$file | |
+ else | |
+ echo "failed" | |
+ fi | |
+ | |
+ # If we removed an old version, symlink it to the new version | |
+ if [ "X$oldfile" != "X" ] && [ "$oldfile" != "$Target/$file" ] | |
+ then | |
+ echo -n "Symlinking old $file $oldfile to $Target/$file ... " | |
+ ln -s $Target/$file $oldfile | |
+ if [ -e $oldfile ]; then echo "done"; else echo "failed"; fi | |
+ fi | |
+ done | |
+ | |
+ # Install psmon.conf | |
+ if ! [ -e /etc/psmon.conf ] | |
+ then | |
+ if [ -e etc/psmon.conf ] | |
+ then | |
+ echo -n "Installing etc/psmon.conf ... " | |
+ cp etc/psmon.conf /etc | |
+ if [ -e /etc/psmon.conf ]; then echo "done"; else echo "failed"; fi | |
+ else | |
+ echo -n "Could not find etc/psmon.conf; skipped etc/psmon.conf installation" | |
+ fi | |
+ else | |
+ echo "/etc/psmon.conf already exists; skipped etc/psmon.conf installation" | |
+ fi | |
+ | |
+ # Generate HTML documentation | |
+ if which pod2html > /dev/null 2>&1 | |
+ then | |
+ echo -n "Generating HTML documentation support/psmon.html ... " | |
+ pod2html --css=support/perldoc.css bin/psmon > support/psmon.html | |
+ if [ -e support/psmon.html ]; then echo "done"; else echo "failed"; fi | |
+ fi | |
+ | |
+ # Generate and install man pages | |
+ if which pod2man > /dev/null 2>&1 | |
+ then | |
+ mandir=/usr/man/man1 | |
+ if ! [ -d $mandir ] && [ -d /usr/share/man/man1 ];then | |
+ mandir=/usr/share/man/man1 | |
+ fi | |
+ echo -n "Installing manual psmon.1 ... " | |
+ pod2man bin/psmon > $mandir/psmon.1 | |
+ if [ -e $mandir/psmon.1 ]; then echo "done"; else echo "failed"; fi | |
+ else | |
+ echo "Could not find pod2man; skipped manual installation" | |
+ fi | |
+else | |
+ echo "Could not find psmon; skipped psmon installation" | |
+fi | |
+ | |
+ | |
+ | |
diff --git a/psmon-1.29/support/perldoc.css b/psmon-1.29/support/perldoc.css | |
new file mode 100644 | |
index 0000000..fb02d22 | |
--- /dev/null | |
+++ b/psmon-1.29/support/perldoc.css | |
@@ -0,0 +1,201 @@ | |
+/* | |
+############################################################ | |
+# $Id: perldoc.css,v 1.6 2004/08/01 10:44:13 nicolaw Exp $ | |
+# perldoc.css - Perl Documentation Cascading Style Sheet | |
+############################################################ | |
+# This file is part of psmon. | |
+# | |
+# psmon is free software; you can redistribute it and/or modify | |
+# it under the terms of the GNU General Public License as published by | |
+# the Free Software Foundation; either version 2 of the License, or | |
+# (at your option) any later version. | |
+# | |
+# psmon is distributed in the hope that it will be useful, | |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
+# GNU General Public License for more details. | |
+# | |
+# You should have received a copy of the GNU General Public License | |
+# along with psmon; if not, write to the Free Software | |
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
+############################################################ | |
+*/ | |
+ | |
+BODY { | |
+ font-family: Arial,Helvetica; | |
+} | |
+ | |
+BLOCKQUOTE { margin: 10pt; } | |
+ | |
+H1,A { color: #336699; } | |
+ | |
+/*** Top menu style ****/ | |
+.mmenuon { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #ff6600; font-size: 10pt; | |
+ } | |
+.mmenuoff { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #ffffff; font-size: 10pt; | |
+} | |
+.cpyright { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #ffffff; font-size: xx-small; | |
+} | |
+.cpyrightText { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #ffffff; font-size: xx-small; | |
+} | |
+.sections { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: 11pt; | |
+} | |
+.dsections { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: 12pt; | |
+} | |
+.slink { | |
+ font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; | |
+ color: #336699; font-size: 9pt; | |
+} | |
+ | |
+.slink2 { font-family: Arial,Helvetica; text-decoration: none; color: #336699; } | |
+ | |
+.maintitle { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: 18pt; | |
+} | |
+.dblArrow { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: small; | |
+} | |
+.menuSec { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: small; | |
+} | |
+ | |
+.newstext { | |
+ font-family: Arial,Helvetica; font-size: small; | |
+} | |
+ | |
+.linkmenu { | |
+ font-family: Arial,Helvetica; color: #000000; font-weight: bold; | |
+ text-decoration: none; | |
+} | |
+ | |
+P { | |
+ font-family: Arial,Helvetica; | |
+} | |
+ | |
+PRE { | |
+ border: 1px solid black; | |
+ background: #e5e5ee; | |
+ padding: 5px 5px 5px 5px; | |
+ font-size: 10pt; | |
+} | |
+.quote { | |
+ font-family: Times; text-decoration: none; | |
+ color: #000000; font-size: 9pt; font-style: italic; | |
+} | |
+.smstd { font-family: Arial,Helvetica; color: #000000; font-size: x-small; } | |
+.std { font-family: Arial,Helvetica; color: #000000; } | |
+.meerkatTitle { | |
+ font-family: sans-serif; font-size: x-small; color: black; } | |
+ | |
+.meerkatDescription { font-family: sans-serif; font-size: 10pt; color: black } | |
+.meerkatCategory { | |
+ font-family: sans-serif; font-size: 9pt; font-weight: bold; font-style: italic; | |
+ color: brown; } | |
+.meerkatChannel { | |
+ font-family: sans-serif; font-size: 9pt; font-style: italic; color: brown; } | |
+.meerkatDate { font-family: sans-serif; font-size: xx-small; color: #336699; } | |
+ | |
+.tocTitle { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #333333; font-size: 10pt; | |
+} | |
+ | |
+.toc-item { | |
+ font-family: Arial,Helvetica; font-weight: bold; | |
+ color: #336699; font-size: 10pt; text-decoration: underline; | |
+} | |
+ | |
+.perlVersion { | |
+ font-family: Arial,Helvetica; font-weight: bold; | |
+ color: #336699; font-size: 10pt; text-decoration: none; | |
+} | |
+ | |
+.docTitle { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #000000; font-size: 10pt; | |
+} | |
+.dotDot { | |
+ font-family: Arial,Helvetica; font-weight: bold; | |
+ color: #000000; font-size: 9pt; | |
+} | |
+ | |
+.docSec { | |
+ font-family: Arial,Helvetica; font-weight: normal; | |
+ color: #333333; font-size: 9pt; | |
+} | |
+.docVersion { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: 10pt; | |
+} | |
+ | |
+.docSecs-on { | |
+ font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; | |
+ color: #ff0000; font-size: 10pt; | |
+} | |
+.docSecs-off { | |
+ font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; | |
+ color: #333333; font-size: 10pt; | |
+} | |
+ | |
+h2 { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: medium; | |
+} | |
+h1 { | |
+ font-family: Verdana,Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: large; | |
+} | |
+ | |
+DL { | |
+ font-family: Arial,Helvetica; font-weight: normal; text-decoration: none; | |
+ color: #333333; font-size: 10pt; | |
+} | |
+ | |
+UL > LI > A { | |
+ font-family: Arial,Helvetica; font-weight: bold; | |
+ color: #336699; font-size: 10pt; | |
+} | |
+ | |
+.moduleInfo { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #333333; font-size: 11pt; | |
+} | |
+ | |
+.moduleInfoSec { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: 10pt; | |
+} | |
+ | |
+.moduleInfoVal { | |
+ font-family: Arial,Helvetica; font-weight: normal; text-decoration: underline; | |
+ color: #000000; font-size: 10pt; | |
+} | |
+ | |
+.cpanNavTitle { | |
+ font-family: Arial,Helvetica; font-weight: bold; | |
+ color: #ffffff; font-size: 10pt; | |
+} | |
+.cpanNavLetter { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #333333; font-size: 9pt; | |
+} | |
+.cpanCat { | |
+ font-family: Arial,Helvetica; font-weight: bold; text-decoration: none; | |
+ color: #336699; font-size: 9pt; | |
+} | |
+ | |
diff --git a/psmon-1.29/support/psmon.html b/psmon-1.29/support/psmon.html | |
new file mode 100644 | |
index 0000000..2e85586 | |
--- /dev/null | |
+++ b/psmon-1.29/support/psmon.html | |
@@ -0,0 +1,1081 @@ | |
+<HTML> | |
+<HEAD> | |
+<TITLE>psmon</TITLE> | |
+</HEAD> | |
+<BODY BGCOLOR="#ffffff" TEXT="#000000"> | |
+<UL> | |
+<LI><A HREF="#NAME">NAME | |
+ | |
+</A><LI><A HREF="#VERSION">VERSION | |
+ | |
+</A><LI><A HREF="#SYNOPSIS">SYNOPSIS | |
+ | |
+</A><UL> | |
+<LI><A HREF="#Crontab">Crontab | |
+ | |
+</A></UL> | |
+<LI><A HREF="#DESCRIPTION">DESCRIPTION | |
+ | |
+</A><LI><A HREF="#OPERATION">OPERATION | |
+ | |
+</A><LI><A HREF="#INSTALLATION">INSTALLATION | |
+ | |
+</A><LI><A HREF="#CONFIGURATION">CONFIGURATION | |
+ | |
+</A><UL> | |
+<LI><A HREF="#DIRECTIVES">DIRECTIVES | |
+ | |
+</A><LI><A HREF="#PROCESS%20SCOPE%20DIRECTIVES">PROCESS SCOPE DIRECTIVES | |
+ | |
+</A><LI><A HREF="#EXAMPLES">EXAMPLES | |
+ | |
+</A></UL> | |
+<LI><A HREF="#SIGNALS">SIGNALS | |
+ | |
+</A><LI><A HREF="#EXIT%20CODES">EXIT CODES | |
+ | |
+</A><LI><A HREF="#PERFORMANCE">PERFORMANCE | |
+ | |
+</A><LI><A HREF="#SUBROUTINES">SUBROUTINES | |
+ | |
+</A><UL> | |
+<LI><A HREF="#PSMon%3a%3aLogging%20METHODS">PSMon::Logging METHODS | |
+ | |
+</A><LI><A HREF="#Unix%3a%3aSyslog%20STUB%20METHODS">Unix::Syslog STUB METHODS | |
+ | |
+</A></UL> | |
+<LI><A HREF="#BUGS">BUGS | |
+ | |
+</A><LI><A HREF="#TODO">TODO | |
+ | |
+</A><LI><A HREF="#SEE%20ALSO">SEE ALSO | |
+ | |
+</A><LI><A HREF="#LICENSE">LICENSE | |
+ | |
+</A><LI><A HREF="#AUTHOR">AUTHOR | |
+ | |
+</A></UL> | |
+<HR> | |
+<H1><A NAME="NAME">NAME | |
+ | |
+</A></H1> | |
+ | |
+<P>psmon - Process Table Monitoring Script | |
+ | |
+</P><H1><A NAME="VERSION">VERSION | |
+ | |
+</A></H1> | |
+ | |
+<P>$Id: psmon.html,v 1.15 2005/05/06 14:36:36 nicolaw Exp $ | |
+ | |
+</P><H1><A NAME="SYNOPSIS">SYNOPSIS | |
+ | |
+</A></H1> | |
+ | |
+<PRE> Syntax: psmon [--conf=filename] [--daemon] [--cron] [--user=user] [--nouser] | |
+ [--adminemail=emailaddress] [--dryrun] [--verbose] | |
+ [--help] [--version] | |
+ | |
+ --help Display this help | |
+ --version Display full version information | |
+ --dryrun Dry run (do not actually kill or spawn any processes) | |
+ --daemon Spawn in to background daemon | |
+ --cron Disables 'already running' errors with the --daemon option | |
+ --conf=str Specify alternative config filename | |
+ --user=str Only scan the process table for processes running as str | |
+ --nouser Force scanning for all users when not run as superuser | |
+ --adminemail=str Force all notification emails to be sent to str | |
+ --verbose Output more verbose information</PRE> | |
+<H2><A NAME="Crontab">Crontab | |
+ | |
+</A></H2> | |
+ | |
+<P>Single user account crontab operation: | |
+ | |
+</P> | |
+<PRE> MAILTO="nicolaw@cpan.org" | |
+ HOME=/home/nicolaw | |
+ USER=nicolaw | |
+ */5 * * * * psmon --daemon --cron --conf=$HOME/etc/psmon.conf --user=$USER --adminemail=$MAILTO</PRE> | |
+ | |
+<P>Regular system-wide call from cron: | |
+ | |
+</P> | |
+<PRE> */5 * * * * psmon --daemon --cron</PRE> | |
+ | |
+<P>Only check processes during working office hours: | |
+ | |
+</P> | |
+<PRE> * 9-17 * * * psmon</PRE> | |
+<H1><A NAME="DESCRIPTION">DESCRIPTION | |
+ | |
+</A></H1> | |
+ | |
+<P>This script monitors the process table using Proc::ProcessTable, and | |
+will respawn or kill processes based on a set of rules defined in an | |
+Apache style configuration file. | |
+ | |
+</P> | |
+<P>Processes will be respawned if a spawn command is defined for a process, | |
+and no occurrences of that process are running. If the --user command line | |
+option is specified, then the process will only be spawned if no instances | |
+are running as the specified userid. | |
+ | |
+</P> | |
+<P>Processes can be killed off if they have been running for too long, | |
+use too much CPU or memory resources, or have too many concurrent | |
+versions running. Exceptions can be made to kill rulesets using the | |
+<I>pidfile</I> and <I>lastsafepid</I> directives. | |
+ | |
+</P> | |
+<P>If a PID file is declared for a process, psmon will never kill the | |
+process ID that is contained within the pid file. This is useful if for | |
+example, you have a script which spawns hundreds of child processes | |
+which you may need to automatically kill, but you do not want to kill | |
+the parent process. | |
+ | |
+</P> | |
+<P>Any actions performed will be logged to the DAEMON syslog facility by default. | |
+There is support to optionally also send notifications emails to an | |
+administrator on a global or pre-rule basis. | |
+ | |
+</P><H1><A NAME="OPERATION">OPERATION | |
+ | |
+</A></H1> | |
+<DL><DT><A NAME="--help">--help | |
+ | |
+</A></DT> | |
+<DD> | |
+Display this help. | |
+ | |
+</DD> | |
+<DT><A NAME="--version">--version | |
+ | |
+</A></DT> | |
+<DD> | |
+Display full version information. | |
+ | |
+</DD> | |
+<DT><A NAME="--dryrun">--dryrun | |
+ | |
+</A></DT> | |
+<DD> | |
+Execute a dry-run (do not actually kill or spawn and processes). | |
+ | |
+</DD> | |
+<DT><A NAME="--daemon">--daemon | |
+ | |
+</A></DT> | |
+<DD> | |
+Spawn in to background daemon. | |
+ | |
+</DD> | |
+<DT><A NAME="--cron">--cron | |
+ | |
+</A></DT> | |
+<DD> | |
+Disables already running warnings when trying to launch as another daemon. | |
+ | |
+</DD> | |
+<DT><A NAME="--conf%3dfilename">--conf=<I>filename</I> | |
+ | |
+</A></DT> | |
+<DD> | |
+Specify alternative config filename. The configuration file defaults | |
+to /etc/psmon.conf when running as superuser, or ~/etc/psmon.conf when | |
+running as a non-superuser. | |
+ | |
+</DD> | |
+<DT><A NAME="--user%3duser">--user=<I>user</I> | |
+ | |
+</A></DT> | |
+<DD> | |
+Only scan the process table for processes running under this username. | |
+ | |
+</DD> | |
+<DT><A NAME="--nouser">--nouser | |
+ | |
+</A></DT> | |
+<DD> | |
+Force scanning for all users when not run as superuser. By default psmon | |
+will only scan processes belonging to the current user for non-superusers. | |
+ | |
+</DD> | |
+<DT><A NAME="--adminemail%3demailaddress">--adminemail=<I>emailaddress</I> | |
+ | |
+</A></DT> | |
+<DD> | |
+Force all notification emails to be sent to this email address. This | |
+option will override all AdminEmail directives within the configuration | |
+file. | |
+ | |
+</DD> | |
+<DT><A NAME="--verbose">--verbose | |
+ | |
+</A></DT> | |
+<DD> | |
+Output more verbose information. | |
+ | |
+</DD> | |
+</DL> | |
+<H1><A NAME="INSTALLATION">INSTALLATION | |
+ | |
+</A></H1> | |
+ | |
+<P>In addition to Perl 5.005_03 or higher, the following Perl modules are | |
+required: | |
+ | |
+</P> | |
+<PRE> Proc::ProcessTable | |
+ Config::General | |
+ Getopt::Long | |
+ POSIX | |
+ IO::File | |
+ File::Basename</PRE> | |
+ | |
+<P>These two additional modules are not required, but will provide enhanced | |
+functionality if present. | |
+ | |
+</P> | |
+<PRE> Net::SMTP | |
+ Unix::Syslog</PRE> | |
+ | |
+<P>The POSIX module is usually supplied with Perl as standard, as is | |
+IO::File and File::Basename. All these modules can be | |
+obtained from CPAN. Visit http://search.span.org and http://www.cpan.org | |
+for further details. For the lazy people reading this, you can try the | |
+following command to install these modules: | |
+ | |
+</P> | |
+<PRE> for m in Config::General Proc::ProcessTable Net::SMTP \ | |
+ Unix::Syslog Getopt::Long; do perl -MCPAN -e"install $m";done</PRE> | |
+ | |
+<P>Alternatively you can run the install.sh script which comes in the | |
+distribution tarball. It will attempt to install the right modules, | |
+install the script and configuration file, and generate UNIX man page | |
+documentation. | |
+ | |
+</P> | |
+<P>By default psmon will look for its runtime configuration in /etc/psmon.conf, | |
+although this can be defined as otherwise from the command line. For system | |
+wide installations it is recommended that you install your psmon in to the | |
+default location. | |
+ | |
+</P><H1><A NAME="CONFIGURATION">CONFIGURATION | |
+ | |
+</A></H1> | |
+ | |
+<P>The default configuration file location is /etc/psmon.conf. A different | |
+configuration file can be declared from the command line. You will find | |
+an example configuration file supplied in the etc/ directory of the | |
+distribution tarball. It is recommended that you use this as a guide to | |
+writing your own configuration file by hand. Alternatively you can use | |
+the <B>psmon-config</B> script which will interactively create a configuration | |
+for you. | |
+ | |
+</P> | |
+<P>Syntax of the configuration file is based upon that which is used by | |
+Apache. Each process to be monitored is declared with a Process scope | |
+directive like this example which monitors the OpenSSH daemon: | |
+ | |
+</P> | |
+<PRE> <Process sshd> | |
+ spawncmd /sbin/service sshd start | |
+ pidfile /var/run/sshd.pid | |
+ instances 50 | |
+ pctcpu 90 | |
+ </Process></PRE> | |
+ | |
+<P>There is a special <I>*</I> process scope which applies to <I>all</I> running | |
+processes. This special scope should be used with extreme care. It does | |
+not support the use of the <I>spawncmd</I>, <I>pidfile</I>, <I>instances</I> or <I>ttl</I> | |
+directives. A typical example of this scope might be as follows: | |
+ | |
+</P> | |
+<PRE> <Process *> | |
+ pctcpu 95 | |
+ pctmem 80 | |
+ </Process></PRE> | |
+ | |
+<P>Global directives which are not specific to any one process should be placed | |
+outside of any Process scopes. | |
+ | |
+</P><H2><A NAME="DIRECTIVES">DIRECTIVES | |
+ | |
+</A></H2> | |
+ | |
+<P>Configuration directives are not case sensitive, but the values that they | |
+define are. | |
+ | |
+</P><DL><DT><A NAME="Facility">Facility | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines which syslog facility to log to. Valid options are as follows; | |
+LOG_KERN, LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_SYSLOG, LOG_LPR, | |
+LOG_NEWS, LOG_UUCP, LOG_CRON, LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, | |
+LOG_LOCAL3, LOG_LOCAL4, LOG_LOCAL5, LOG_LOCAL6 and LOG_LOCAL7. This | |
+functionality requires the Unix::Syslog module. Defaults to LOG_DAEMON. | |
+ | |
+</DD> | |
+<DT><A NAME="LogLevel">LogLevel | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the loglevel priority that notifications to syslog will be | |
+marked as. Valid options are as follows; LOG_EMERG, LOG_ALERT, LOG_CRIT, | |
+LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO and LOG_DEBUG. The log level | |
+used by a notification for any failed action will automatically be | |
+raised to the next level in order to highlight the failure. May be also be used | |
+in a Process scope which will take priority over a global declaration. This | |
+functionality requires the Unix::Syslog module. Defaults to LOG_NOTICE. | |
+ | |
+</DD> | |
+<DT><A NAME="KillLogLevel%20(previously%20KillPIDLogLevel)">KillLogLevel (previously KillPIDLogLevel) | |
+ | |
+</A></DT> | |
+<DD> | |
+The same as the loglevel directive, but only applies to process kill actions. | |
+Takes priority over the loglevel directive. May be also be used in a | |
+Process scope which will take priority over a global declaration. | |
+Undefined by default. | |
+ | |
+</DD> | |
+<DT><A NAME="SpawnLogLevel">SpawnLogLevel | |
+ | |
+</A></DT> | |
+<DD> | |
+The same as the loglevel directive, but only applies to process spawn actions. | |
+Takes priority over the loglevel directive. May be also be used in a | |
+Process scope which will take priority over a global declaration. | |
+Undefined by default. | |
+ | |
+</DD> | |
+<DT><A NAME="AdminEmail">AdminEmail | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the email address where notification emails should be sent to. | |
+May be also be used in a Process scope which will take priority over a | |
+global declaration. Defaults to root@localhost. | |
+ | |
+</DD> | |
+<DT><A NAME="NotifyEmailFrom">NotifyEmailFrom | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the email address that notification email should be addresses | |
+from. Defaults to <username>@<I>hostname</I>. | |
+ | |
+</DD> | |
+<DT><A NAME="Frequency">Frequency | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the frequency of process table queries. Defaults to 60 seconds. | |
+ | |
+</DD> | |
+<DT><A NAME="LastSafePID">LastSafePID | |
+ | |
+</A></DT> | |
+<DD> | |
+When defined, psmon will never attempt to kill a process ID which is | |
+numerically less than or equal to the value defined by lastsafepid. It | |
+should be noted that psmon will never attempt to kill itself, or a process ID | |
+less than or equal to 1. Defaults to 100. | |
+ | |
+</DD> | |
+<DT><A NAME="ProtectSafePIDsQuietly">ProtectSafePIDsQuietly | |
+ | |
+</A></DT> | |
+<DD> | |
+Accepts a boolean value of On or Off. Suppresses all notifications of | |
+preserved process IDs when used in conjunction with the <I>lastsafepid</I> | |
+directive. Defaults to Off. | |
+ | |
+</DD> | |
+<DT><A NAME="SMTPHost">SMTPHost | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the IP address or hostname of the SMTP server to used to send | |
+email notifications. This functionality requires the Net::SMTP module. | |
+Defaults to localhost. | |
+ | |
+</DD> | |
+<DT><A NAME="SMTPTimeout">SMTPTimeout | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the timeout in seconds to be used during SMTP connections. This | |
+functionality requires the Net::SMTP module. Defaults to 20 seconds. | |
+ | |
+</DD> | |
+<DT><A NAME="SendmailCmd">SendmailCmd | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the sendmail command to use to send notification emails if there | |
+is a failure with the SMTP connection to the host defined by <I>smtphost</I>. | |
+Defaults to '/lib/sendmail -t' or '/usr/sbin/sendmail -t'. | |
+ | |
+</DD> | |
+<DT><A NAME="DefaultEmailMethod">DefaultEmailMethod | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines which method should be used by default to try and send notification | |
+emails. Legal values are 'SMTP' or 'sendmail'. Defaults to 'sendmail'. | |
+ | |
+</DD> | |
+<DT><A NAME="Dryrun">Dryrun | |
+ | |
+</A></DT> | |
+<DD> | |
+Forces psmon to act in the same way as if the --dryrun command line switch | |
+had specified. This is useful if you want to force a specific configuration | |
+file to only report and never actually take any automated action. | |
+ | |
+</DD> | |
+<DT><A NAME="NeverKillPID">NeverKillPID | |
+ | |
+</A></DT> | |
+<DD> | |
+Accepts a space delimited list of PIDs which will never be killed. | |
+Defaults to 1. | |
+ | |
+</DD> | |
+<DT><A NAME="NeverKillProcessName">NeverKillProcessName | |
+ | |
+</A></DT> | |
+<DD> | |
+Accepts a space delimited list of process names which will never be | |
+killed. Defaults to 'devfsadmd kswapd kupdated mdrecoveryd pageout sched init fsflush'. | |
+ | |
+</DD> | |
+</DL> | |
+<H2><A NAME="PROCESS%20SCOPE%20DIRECTIVES">PROCESS SCOPE DIRECTIVES | |
+ | |
+</A></H2> | |
+<DL><DT><A NAME="SpawnCmd">SpawnCmd | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the full command line to be executed in order to respawn a dead | |
+process. | |
+ | |
+</DD> | |
+<DT><A NAME="KillCmd">KillCmd | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the full command line to be executed in order to gracefully | |
+shutdown or kill a rogue process. If the command returns a boolean true | |
+exit status then it is assumed that the command failed to execute | |
+successfully. If no KillCmd is specified or the command fails, the | |
+process will be killed by sending a SIGKILL signal with the standard | |
+kill() function. Undefined by default. | |
+ | |
+</DD> | |
+<DT><A NAME="PIDFile">PIDFile | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines the full path and filename of a file created by a process which | |
+contain its main parent process ID. PSMon will not kill the PID number | |
+which is contained within the PIDFile. | |
+ | |
+</DD> | |
+<DT><A NAME="TTL">TTL | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines a maximum time to live (in seconds) of a process. The process | |
+will be killed once it has been running longer than this value, and | |
+its process ID isn't contained in the defined pidfile. | |
+ | |
+</DD> | |
+<DT><A NAME="PctCpu">PctCpu | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines a maximum allowable percentage of CPU time a process may use. | |
+The process will be killed once its CPU usage exceeds this threshold | |
+and its process ID isn't contained in the defined pidfile. | |
+ | |
+</DD> | |
+<DT><A NAME="PctMem">PctMem | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines a maximum allowable percentage of total system memory a process | |
+may use. The process will be killed once its memory usage exceeds this | |
+threshold and its process ID isn't contained in the defined pidfile. | |
+ | |
+</DD> | |
+<DT><A NAME="Instances">Instances | |
+ | |
+</A></DT> | |
+<DD> | |
+Defines a maximum number of instances of a process which may run. The | |
+process will be killed once there are more than this number of occurrences | |
+running, and its process ID isn't contained in the defined pid file. | |
+ | |
+</DD> | |
+<DT><A NAME="NoEmailOnKill">NoEmailOnKill | |
+ | |
+</A></DT> | |
+<DD> | |
+Accepts a boolean value of True or False. Supresses process killing | |
+notification emails for this process scope. Defaults to False. | |
+ | |
+</DD> | |
+<DT><A NAME="NoEmailOnSpawn">NoEmailOnSpawn | |
+ | |
+</A></DT> | |
+<DD> | |
+Accepts a boolean value of True or False. Supresses process spawning | |
+notification emails for this process scope. Defaults to False. | |
+ | |
+</DD> | |
+<DT><A NAME="NoEmail">NoEmail | |
+ | |
+</A></DT> | |
+<DD> | |
+Accepts a boolean value of True or False. Supresses all notification | |
+emails for this process scope. Defaults to False. | |
+ | |
+</DD> | |
+</DL> | |
+<H2><A NAME="EXAMPLES">EXAMPLES | |
+ | |
+</A></H2> | |
+ | |
+<PRE> <Process syslogd> | |
+ spawncmd /sbin/service syslogd restart | |
+ pidfile /var/run/syslogd.pid | |
+ instances 1 | |
+ pctcpu 70 | |
+ pctmem 30 | |
+ </Process></PRE> | |
+ | |
+<P>Syslog is a good example of a process which can get a little full | |
+of itself under certain circumstances, and excessively hog CPU and | |
+memory. Here we will kill off syslogd processes if it exceeds 70% | |
+CPU or 30% memory utilization. | |
+ | |
+</P> | |
+<P>Older running copies of syslogd will be killed if they are running, | |
+while leaving the most recently spawned copy which will be listed in | |
+the PID file defined. | |
+ | |
+</P> | |
+<PRE> <Process httpd> | |
+ spawncmd /sbin/service httpd restart | |
+ pidfile /var/run/httpd.pid | |
+ loglevel LOG_CRIT | |
+ adminemail pager@noc.company.com | |
+ </Process></PRE> | |
+ | |
+<P>Here we are monitoring Apache to ensure that it is restarted if | |
+it dies. The pidfile directive in this example is actually | |
+redundant because we have not defined any rule where we should | |
+consider killing any httpd processes. | |
+ | |
+</P> | |
+<P>All notifications relating to this process will be logged with the | |
+syslog priority of critical (LOG_CRIT), and all emailed to | |
+pager@noc.company.com which could typically forward to a pager. | |
+ | |
+</P> | |
+<P>Any failed attempts to kill or restart a process will automatically | |
+be logged as a syslog priority one level higher than that specified. | |
+If a restart of Apache were to fail in this example, a wall | |
+notification would be broadcast to all interactive terminals | |
+connected to the machine, since the next log priority up from | |
+LOG_CRIT is LOG_EMERG. | |
+ | |
+</P> | |
+<P>Note that the functionality to log information to syslog requires | |
+the Unix::Syslog module. In the event that Unix::Syslog is not | |
+installed, PSMon will write all status messages that would have | |
+been destined for syslog, to STDERR instead. | |
+ | |
+</P> | |
+<PRE> <Process find> | |
+ noemail True | |
+ ttl 3600 | |
+ </Process></PRE> | |
+ | |
+<P>Kill old find processes which have been running for over an hour. | |
+Do not send an email notification since it's not too important. | |
+ | |
+</P><H1><A NAME="SIGNALS">SIGNALS | |
+ | |
+</A></H1> | |
+<DL><DT><A NAME="HUP">HUP | |
+ | |
+</A></DT> | |
+<DD> | |
+Forces an immediate reload of the configuration file. You should | |
+send the HUP signal when you are running psmon as a background | |
+daemon and have altered the psmon.conf file. | |
+ | |
+</DD> | |
+<DT><A NAME="USR1">USR1 | |
+ | |
+</A></DT> | |
+<DD> | |
+Forces an immediate scan of the process table. | |
+ | |
+</DD> | |
+</DL> | |
+<H1><A NAME="EXIT%20CODES">EXIT CODES | |
+ | |
+</A></H1> | |
+<DL><DT><A NAME="Value%200%3a%20Exited%20gracefully">Value 0: Exited gracefully | |
+ | |
+</A></DT> | |
+<DD> | |
+The program exited gracefully. | |
+ | |
+</DD> | |
+<DT><A NAME="Value%202%3a%20Failure%20to%20lookup%20UID%20for%20username">Value 2: Failure to lookup UID for username | |
+ | |
+</A></DT> | |
+<DD> | |
+The username specified by the --user command line option did not resolve to a valid | |
+UID. | |
+ | |
+</DD> | |
+<DT><A NAME="Value%203%3a%20Configuration%20file%20is%20disabled">Value 3: Configuration file is disabled | |
+ | |
+</A></DT> | |
+<DD> | |
+The configuration file is disabled. (It contains an active 'Disabled' directive). | |
+ | |
+</DD> | |
+<DT><A NAME="Value%204%3a%20Configuration%20file%20does%20not%20exist">Value 4: Configuration file does not exist | |
+ | |
+</A></DT> | |
+<DD> | |
+The specified configuration file, (default or user specified) does not exist. | |
+ | |
+</DD> | |
+<DT><A NAME="Value%205%3a%20Unable%20to%20open%20PID%20file%20handle">Value 5: Unable to open PID file handle | |
+ | |
+</A></DT> | |
+<DD> | |
+Failed to open a read-only file handle for the runtime PID file. | |
+ | |
+</DD> | |
+<DT><A NAME="Value%206%3a%20Failed%20to%20fork">Value 6: Failed to fork | |
+ | |
+</A></DT> | |
+<DD> | |
+An error occurred while attempting to fork the child background daemon process. | |
+ | |
+</DD> | |
+<DT><A NAME="Value%207%3a%20Unable%20to%20open%20PID%20file%20handle">Value 7: Unable to open PID file handle | |
+ | |
+</A></DT> | |
+<DD> | |
+Failed to open a write file handle for the runtime PID file. | |
+ | |
+</DD> | |
+</DL> | |
+<H1><A NAME="PERFORMANCE">PERFORMANCE | |
+ | |
+</A></H1> | |
+ | |
+<P>psmon is not especially fast. Much of its time is spent reading the process table. | |
+If the process table is particularly large this can take a number of seconds. | |
+Although is rarely a major problem on todays speedy machines, I have run a few tests | |
+so you take look at the times and decide if you can afford the wait. | |
+ | |
+</P> | |
+<P>Approximate figures from release 1.0.3: | |
+ | |
+</P> | |
+<PRE> CPU OS Open Files/Procs 1m Load Real Time | |
+ PIII 1.1G Mandrake 9.0 10148 / 267 0.01 0m0.430s | |
+ PIII 1.2G Mandrake 9.0 16714 / 304 0.44 0m0.640s | |
+ Celeron 500 Red Hat 6.1 1780 / 81 1.27 0m0.880s | |
+ PII 450 Red Hat 6.0 300 / 23 0.01 0m1.050s | |
+ 2x Xeon 1.8G Mandrake 9.0 90530 / 750 0.38 0m1.130s | |
+ Celeron 500 Red Hat 6.1 1517 / 77 1.00 0m1.450s | |
+ PIII 866 Red Hat 8.0 3769 / 76 0.63 0m1.662s | |
+ PIII 750 Red Hat 6.2 754 / 35 3.50 0m2.170s</PRE> | |
+ | |
+<P>These production machines were running the latest patched stock distribution kernels. | |
+I have listed the total number of open file descriptors, processes running and 1 minute | |
+load average to give you a slightly better context of the performance. | |
+ | |
+</P> | |
+<P>Approximate figures from release 1.17: | |
+ | |
+</P> | |
+<PRE> CPU OS 1m Load CPU Time | |
+ UltraSPARC-IIe 500Mhz SunOS 5.9 0.10 0m0.550s | |
+ Athlon XP 2400+ 2Ghz RHEL 3.0 1.00 0m0.150s </PRE> | |
+<H1><A NAME="SUBROUTINES">SUBROUTINES | |
+ | |
+</A></H1> | |
+<DL><DT><A NAME="check_processtable()">check_processtable() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>Reads the current process table, checks and then executes any appropriate | |
+action to be taken. Does not accept any parameters. | |
+ | |
+</P></DD> | |
+<DT><A NAME="slay_process()">slay_process() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>Attempts to kill a process with its killcmd, or failing that using the kill() function. | |
+Accepts the process name, syslog log level, email notification to address and a reference | |
+to the %slay hash. | |
+ | |
+</P></DD> | |
+<DT><A NAME="slurp_tmplog()">slurp_tmplog() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>Slurps up the contents of a temporary log file and returns it as a chomped | |
+array after unlinking the temporary log file. | |
+ | |
+</P></DD> | |
+<DT><A NAME="print_init_style()">print_init_style() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>Prints a Red Hat sysvinit style status message. Accepts an array of messages | |
+to display in sequence. | |
+ | |
+</P></DD> | |
+<DT><A NAME="spawn_process()">spawn_process() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>Attempts to spawn a process. Accepts the process name, syslog log level, mail | |
+notification to address and spawn command. | |
+ | |
+</P></DD> | |
+<DT><A NAME="display_help()">display_help() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>Displays command line help. | |
+ | |
+</P></DD> | |
+<DT><A NAME="parse_user_to_run_as()">parse_user_to_run_as() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>Determine what UID to scan for in the process table. | |
+ | |
+</P></DD> | |
+<DT><A NAME="read_config()">read_config() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>Reads in runtime configuration options. | |
+ | |
+</P></DD> | |
+<DT><A NAME="isnumeric()">isnumeric() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>An evil bastard fudge to ensure that we're only dealing with numerics when | |
+necessary, from the config file and Proc::ProcessTable scan. | |
+ | |
+</P></DD> | |
+<DT><A NAME="daemonize()">daemonize() | |
+ | |
+</A></DT> | |
+<DD> | |
+ | |
+<P>Launches the process in to the background. Checks to see if there is already an | |
+instance running. | |
+ | |
+</P></DD> | |
+<DT><A NAME="display_version()">display_version() | |
+ | |
+</A></DT> | |
+<DD> | |
+Displays complete version, author and license information. | |
+ | |
+</DD> | |
+<DT><A NAME="TRACE()">TRACE() | |
+ | |
+</A></DT> | |
+<DD> | |
+Prints trace information to STDOUT if the DEBUG constant has been set to | |
+boolean true. The DEBUG constant is set to boolean true in the event that | |
+the environment variable PSMon_DEBUG is also set to boolean true. | |
+ | |
+</DD> | |
+<DT><A NAME="DUMP()">DUMP() | |
+ | |
+</A></DT> | |
+<DD> | |
+See TRACE(). | |
+ | |
+</DD> | |
+</DL> | |
+<H2><A NAME="PSMon%3a%3aLogging%20METHODS">PSMon::Logging METHODS | |
+ | |
+</A></H2> | |
+<DL><DT><A NAME="new()">new() | |
+ | |
+</A></DT> | |
+<DD> | |
+Creates a new PSMon::Logging object. | |
+ | |
+</DD> | |
+<DT><A NAME="openlog()">openlog() | |
+ | |
+</A></DT> | |
+<DD> | |
+Opens a connection to syslog using Unix::Syslog. | |
+ | |
+</DD> | |
+<DT><A NAME="closelog()">closelog() | |
+ | |
+</A></DT> | |
+<DD> | |
+Closes a connection to syslog. | |
+ | |
+</DD> | |
+<DT><A NAME="loglevel()">loglevel() | |
+ | |
+</A></DT> | |
+<DD> | |
+Accepts a syslog loglevel keyword and returns the associated constant integer. | |
+ | |
+</DD> | |
+<DT><A NAME="logfacility()">logfacility() | |
+ | |
+</A></DT> | |
+<DD> | |
+Accepts a syslog facility keyword and returns the associated constant integer. | |
+ | |
+</DD> | |
+<DT><A NAME="alert()">alert() | |
+ | |
+</A></DT> | |
+<DD> | |
+Logs a message to syslog using Log() and sends a notification email using | |
+sendmail(). | |
+ | |
+</DD> | |
+<DT><A NAME="Log()">Log() | |
+ | |
+</A></DT> | |
+<DD> | |
+Logs messages to DAEMON facility in syslog. Accepts a log | |
+level and message array. Will terminate the process if it is | |
+asked to log a message of a log level 2 or less (LOG_EMERG, | |
+LOG_ALERT, LOG_CRIT). | |
+ | |
+</DD> | |
+<DT><A NAME="sendmail()">sendmail() | |
+ | |
+</A></DT> | |
+<DD> | |
+Sends email notifications of syslog messages, called by alert(). | |
+Accepts sending email address, recipient email address, short | |
+message subject and an optional detailed message body array. | |
+ | |
+</DD> | |
+<DT><A NAME="_sendmail_sendmail()">_sendmail_sendmail() | |
+ | |
+</A></DT> | |
+<DD> | |
+Called by sendmail(), sends an email using the sendmail command. | |
+ | |
+</DD> | |
+<DT><A NAME="_sendmail_smtp()">_sendmail_smtp() | |
+ | |
+</A></DT> | |
+<DD> | |
+Called by sendmail(), sends an email using the Net::SMTP module. | |
+ | |
+</DD> | |
+</DL> | |
+<H2><A NAME="Unix%3a%3aSyslog%20STUB%20METHODS">Unix::Syslog STUB METHODS | |
+ | |
+</A></H2> | |
+ | |
+<P>The __DATA__ section of the PSMon code contains a stub version of the | |
+Unix::Syslog module. It is automatically loaded in the event that the | |
+real Unix::Syslog module is not present and/or cannot be loaded. This stub | |
+module provides very basic functionality to output the messages generated | |
+by the PSMon::Logging module to STDERR, instead of simply dropping them. | |
+ | |
+</P><DL><DT><A NAME="_timestamp()">_timestamp() | |
+ | |
+</A></DT> | |
+<DD> | |
+Retuns a timestamp string which closely resembles timestamps | |
+used by syslog. | |
+ | |
+</DD> | |
+<DT><A NAME="syslog()">syslog() | |
+ | |
+</A></DT> | |
+<DD> | |
+Outputs a syslog formatted and timestamped message to STDERR. | |
+ | |
+</DD> | |
+<DT><A NAME="openlog()">openlog() | |
+ | |
+</A></DT> | |
+<DD> | |
+Stub. | |
+ | |
+</DD> | |
+<DT><A NAME="closelog()">closelog() | |
+ | |
+</A></DT> | |
+<DD> | |
+Stub. | |
+ | |
+</DD> | |
+<DT><A NAME="setlogmask()">setlogmask() | |
+ | |
+</A></DT> | |
+<DD> | |
+Stub. | |
+ | |
+</DD> | |
+<DT><A NAME="priorityname()">priorityname() | |
+ | |
+</A></DT> | |
+<DD> | |
+Stub. | |
+ | |
+</DD> | |
+<DT><A NAME="facilityname()">facilityname() | |
+ | |
+</A></DT> | |
+<DD> | |
+Stub. | |
+ | |
+</DD> | |
+</DL> | |
+<H1><A NAME="BUGS">BUGS | |
+ | |
+</A></H1> | |
+ | |
+<P>Hopefully none. ;-) Send any bug reports to me at nicolaw@cpan.org | |
+along with any patches and details of how to replicate the problem. | |
+Please only send reports for bugs which can be replicated in the | |
+<I>latest</I> version of the software. The latest version can always be | |
+found at http://search.cpan.org/~nicolaw/ | |
+ | |
+</P><H1><A NAME="TODO">TODO | |
+ | |
+</A></H1> | |
+ | |
+<P>The following functionality will be added soon: | |
+ | |
+</P><DL><DT><A NAME="Code%20cleanup">Code cleanup | |
+ | |
+</A></DT> | |
+<DD> | |
+The code needs to be cleaned up and made more efficient. The bulk of the | |
+code will be moved to a separate module, and psmon as you know it now will | |
+become a much smaller and simpler wrapper script. | |
+ | |
+</DD> | |
+<DT><A NAME="Apply%20contributed%20patches">Apply contributed patches | |
+ | |
+</A></DT> | |
+<DD> | |
+Users of psmon have sent me various patches for additional functionality. | |
+These will be incorporated in to the next major release of psmon once the | |
+code has been properly abstracted. | |
+ | |
+</DD> | |
+<DT><A NAME="killperprocessname%20directive">killperprocessname directive | |
+ | |
+</A></DT> | |
+<DD> | |
+Will accept a boolean value. If true, only 1 process per process scope | |
+will ever be killed, instead of all process IDs matching kill rules. | |
+This should be used in conjunction with the new killcmd directive. For | |
+example, you may define that a database daemon may never take up more | |
+than 90% CPU time, and it runs many children processes. If it exceeds | |
+90% CPU time, you want to issue ONE restart command in order to stop and | |
+then start all the database processes in one go. | |
+ | |
+</DD> | |
+<DT><A NAME="time%20period%20limited%20rules">time period limited rules | |
+ | |
+</A></DT> | |
+<DD> | |
+Functionality to limit validity of process scopes to only be checked | |
+between defined time periods. For example, only check that httpd is running | |
+between the hours of 8am and 5pm on Mondays and Tuesdays. | |
+ | |
+</DD> | |
+</DL> | |
+<H1><A NAME="SEE%20ALSO">SEE ALSO | |
+ | |
+</A></H1> | |
+ | |
+<P>nsmon | |
+ | |
+</P><H1><A NAME="LICENSE">LICENSE | |
+ | |
+</A></H1> | |
+ | |
+<P>Written by Nicola Worthington, <nicolaw@cpan.org>. | |
+Copyright (C) 2002,2003,2004,2005 Nicola Worthington. | |
+ | |
+</P> | |
+<P>This program is free software; you can redistribute it and/or | |
+modify it under the terms of the GNU General Public License | |
+as published by the Free Software Foundation; either version 2 | |
+of the License, or (at your option) any later version. | |
+ | |
+</P> | |
+<P>This program is distributed in the hope that it will be useful, | |
+but WITHOUT ANY WARRANTY; without even the implied warranty of | |
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
+GNU General Public License for more details. | |
+ | |
+</P> | |
+<P>You should have received a copy of the GNU General Public License | |
+along with this program; if not, write to the Free Software | |
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
+ | |
+</P><H1><A NAME="AUTHOR">AUTHOR | |
+ | |
+</A></H1> | |
+ | |
+<P>Nicola Worthington <nicolaw@cpan.org> | |
+ | |
+</P> | |
+<P>http://search.cpan.org/~nicolaw/ | |
+ | |
+</P> | |
+<P>http://www.psmon.com | |
+ | |
+</P> | |
+<P>http://www.nicolaworthington.com | |
+ | |
+</P> | |
+</BODY> | |
+</HTML> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment