monexec icon indicating copy to clipboard operation
monexec copied to clipboard

Light supervisor on Go (with optional Consul autoregistration)

Monexec

Mx

MONitoring EXEcutables

GitHub release license Snap Status paypal

It’s tool for controlling processes like a supervisord but with some important features:

  • Easy to use - no dependencies. Just a single binary file pre-compilled for most major platforms
  • Easy to hack - monexec can be used as a Golang library with clean and simple architecture
  • Integrated with Consul - optionally, monexec can register all running processes as services and deregister on fail
  • Optional notification to Telegram
  • Supports gracefull and fast shutdown by signals
  • Developed for used inside Docker containers
  • Different strategies for processes
  • Support additional environment files
  • Support template-based email notification
  • Support HTTP notification
  • REST API (see swagger.yaml)
  • Web UI (if REST API enabled)

Buy me a coffe on Patreon

screen1 screen2

Installing

Get it from the Snap Store

go get -v -u github.com/reddec/monexec/...

recommended way is snap

Documentation

Usage: https://reddec.github.io/monexec/

API: Godoc

Examples

See documentation for details https://reddec.github.io/monexec/

Run from cmd

monexec run -l srv1 --consul -- nc -l 9000

Run from config

monexec start ./myservice.yaml

Notifications

Add notification to Telegram

telegram:
  # BOT token
  token: "123456789:AAAAAAAAAAAAAAAAAAAAAA_BBBBBBBBBBBB"
  services:
      # services that will be monitored
      - "listener2"
  recipients:
      # List of telegrams chat id
      - 123456789
  template: |
    *{{.label}}*
    Service {{.label}} {{.action}}
    {{if .error}}⚠️ *Error:*  {{.error}}{{end}}
    _time: {{.time}}_
    _host: {{.hostname}}_

Email

Add email notification

email:
  services:
    - myservice
  smtp: "smtp.gmail.com:587"
  from: "[email protected]"
  password: "xyzzzyyyzyyzyz"
  to:
    - "[email protected]"
  template: |
    Subject: {{.label}}

    Service {{.label}} {{.action}}

HTTP

Add HTTP request as notification

http:
  services:
    - myservice
  url: "http://example.com/{{.label}}/{{.action}}"
  templateFile: "./body.txt"