You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
mon spawned from the needlessly complex
frustration that tools like monit
provide, with their awkward DSLs and setup. mon is written
in C, uses less than 400kb of memory, and is incredibly simple
to set up.
Installation
$ make install
Too lazy to clone?:
$ (mkdir /tmp/mon && cd /tmp/mon && curl -L# https://github.com/tj/mon/archive/master.tar.gz | tar zx --strip 1 && make install && rm -rf /tmp/mon)
Usage
Usage: mon [options] <command>
Options:
-V, --version output program version
-h, --help output help information
-l, --log <path> specify logfile [mon.log]
-s, --sleep <sec> sleep seconds before re-executing [1]
-S, --status check status of --pidfile
-p, --pidfile <path> write pid to <path>
-m, --mon-pidfile <path> write mon(1) pid to <path>
-P, --prefix <str> add a log prefix
-d, --daemonize daemonize the program
-a, --attempts <n> retry attempts within 60 seconds [10]
-R, --on-restart <cmd> execute <cmd> on restarts
-E, --on-error <cmd> execute <cmd> on error
Example
The most simple use of mon(1) is to simply keep a command running:
You may daemonize mon and disassociate from the term with -d:
$mon./myprogram-d
mon : pid50413
Failure alerts
mon(1) will continue to attempt restarting your program unless the maximum number
of --attempts has been exceeded within 60 seconds. Each time a restart is performed
the --on-restart command is executed, and when mon(1) finally bails the --on-error
command is then executed before mon itself exits and gives up.
For example the following will echo "hey" three times before mon realizes that
the program is unstable, since it's exiting immediately, thus finally invoking
./email.sh, or any other script you like.
NOTE: The process id is passed as an argument to both --on-error and --on-restart scripts.
Managing several mon(1) processes
mon(1) is designed to monitor a single program only, this means a few things,
firstly that a single mon(1) may crash and it will not influence other programs,
secondly that the "configuration" for mon(1) is simply a shell script,
no need for funky weird inflexible DSLs.
I highly recommend checking out jgallen23's mongroup(1),
which provides a great interface for managing any number of mon(1) instances.
Logs
By default mon(1) logs to stdio, however when daemonized it will default
to writing a log file named ./mon.log. If you have several instances you may
wish to --prefix the log lines, or specify separate files.
Signals
SIGQUIT graceful shutdown
SIGTERM graceful shutdown
Links
Tools built with mon(1):
mongroup(1) - monitor a group of processes (shell script)