Introducing JobMonkey

Instead of writing a bash script for automating a recurring job I decided to write a general purpose job executor in Python this time.

The idea was to define recurring jobs (for backup, update checks, etc.) in a config file, which can be executed by name. The jobs will then be called via Cron or Systemd once per day (or any other interval).

Also I wanted to be informed about the outcome of some jobs. But instead of filling up my mailbox I prefer to receive the notifications on my phone via Telegram.

So I ended up writing JobMonkey 🙂 You can find the source on Github.

Jobs consist of one or more tasks. Where each task is a command to be executed.

Features:

  • Configuration is stored in a YAML file.
  • Jobs can be enabled or disabled.
  • Job based reporting can be enabled ‘always’ or ‘on-failure’
  • Reporting can also be enabled for single tasks
  • Reports are sent via Telegram

The config YAML looks like this:

global:
  user: root
  notifications:
    telegram:
      bot_token: 'XXXXXXXXXX:XXX_XXXXXXXXXX_XXXXXXXXXXXXXXXXXXXX'
      chat_id: '0000000000'

jobs:
  - name: test
    enabled: false
    reports:
      - type: telegram
        when: on-failue
    tasks:
      - run: "hostname -f"
        report: true
      - run: "false"
        report: false

  - name: upgrade-check
    descr: "Check for security updates"
    enabled: true
    reports:
      - type: telegram
        when: always
    tasks:
      - run: "apt update"
      - run: "/usr/local/sbin/print_updates.py"
        report: true

Usage:

# jobmonkey -h
usage: jobmonkey [-h] {list,run} ...

Jobmonkey - runs jobs and sends reports

optional arguments:
  -h, --help  show this help message and exit

valid actions:
  {list,run}
    list      List jobs
    run       Run one or more jobs

Listing defined jobs:

# jobmonkey list
+-------------------------+---------+
| Job name                | Enabled |
+-------------------------+---------+
| test                    | False   |
| upgrade-check           | True    |
| backup-dump-database    | True    |
| backup-local-disk       | True    |
| backup-remote-backblaze | True    |
+-------------------------+---------+

Listing defined jobs:

# jobmonkey run upgrade-check -v
processing job: '{'name': 'upgrade-check', 'enabled': True, 'reports': [{'type': 'telegram', 'when': 'always'}], 'tasks': [{'run': 'apt update'}, {'run': '/usr/local/sbin/print_updates.py', 'report': True}]}'
  processing report 'telegram'

Example report:

Job upgrade-check finished with 0 error(s).
 

 Result from '/usr/local/sbin/print_updates.py': 'Security upgrades: 2
 Total upgrades: 6
 

 List of security upgrades:
 curl
 git
 git-man
 ...

Leave a Comment