mon

mon(1) - Simple single-process process monitoring program written in C

  • 所有者: tj/mon
  • 平台:
  • 許可證:
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

mon(1)

Super-simple monitoring program.

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:

$ mon ./myprogram
mon : pid 50395
mon : child 50396
mon : sh -c "./example/program.sh"
one
two
three

You may daemonize mon and disassociate from the term with -d:

$ mon ./myprogram -d
mon : pid 50413

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.

mon "echo hey" --attempts 3 --on-error ./email.sh
mon : child 48386
mon : sh -c "echo hey"
hey
mon : last restart less than one second ago
mon : 3 attempts remaining
mon : child 48387
mon : sh -c "echo hey"
hey
mon : last restart less than one second ago
mon : 2 attempts remaining
mon : child 48388
mon : sh -c "echo hey"
hey
mon : last restart less than one second ago
mon : 1 attempts remaining
mon : 3 restarts within less than one second, bailing
mon : on error `sh test.sh`
emailed failure notice to tobi@ferret-land.com
mon : bye :)

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.

#!/usr/bin/env bash

pids="/var/run"
app="/www/example.com"

mon -d redis-server -p $pids/redis.pid
mon -d "node $app/app" -p $pids/app-0.pid
mon -d "node $app/jobs" -p $pids/jobs-0.pid
mon -d "node $app/jobs" -p $pids/jobs-1.pid
mon -d "node $app/jobs" -p $pids/jobs-2.pid
mon -d "node $app/image" -p $pids/image-0.pid
mon -d "node $app/image" -p $pids/image-1.pid
mon -d "node $app/image-broker" -p $pids/image-broker.pid

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

Tools built with mon(1):

License

MIT

Build Status

Build Status

主要指標

概覽
名稱與所有者tj/mon
主編程語言C
編程語言Makefile (語言數: 3)
平台
許可證
所有者活动
創建於2012-04-11 22:01:06
推送於2016-09-07 15:22:47
最后一次提交2016-09-07 08:22:47
發布數11
最新版本名稱1.2.3 (發布於 2013-12-01 09:34:08)
第一版名稱0.0.2 (發布於 )
用户参与
星數1.1k
關注者數49
派生數95
提交數93
已啟用問題?
問題數28
打開的問題數12
拉請求數12
打開的拉請求數4
關閉的拉請求數6
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?