Skip to content
/ chas Public

Framework for running and maintaining cron jobs

Notifications You must be signed in to change notification settings

exponea/chas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chas

Installation

Install library through pip

pip install chas

Add decorator to function in your script called job_jobname.py (note: it must start with prefix job_) that you want to run as cron job. For example:

from chas import chas

@chas.job("08:00")
def print_hello_world():
    print("Hello, World!")

Finally, you can start up a server by running. This starts the cron scheduler, which will execute the function at given times, and also you can view and manage jobs on localhost:5000.

chas start --http-server

Command line

Chas is convenient even from running jobs from your command line. You can do

chas list

Which prints out all the registered jobs

Job                Next run             Last run             Last status
print_hello_world  22-12-2018 08:00:00  N/A                  N/A 

You can run any of these jobs by typing

chas run print_hello_world

Decorators

As already mentioned, @chas.job(time) registers a job at a particular time. There another decorator @chas.setup() which simply executes the script inside during the import time. This should be used for setting up environment variables. For example`

import os
from chas import chas

@chas.setup()
def setup_environment():
    os.environ["foo"] = "bar"

@chas.job("09:00")
def print_env_var():
    print(os.environ["foo"])

On run would print bar.

Packages

In case you structure your directory as a Python package, you will need to export all scripts with @chas.job from the package. Then, you will run all shell commands as above, but with adding parameter --package folder_name where folder_name specifies the entry point to your package. For example, if you structure your package in the following way:

.
|-- src
|   -- __init__.py
|   -- script_one.py
|   -- script_two.py 
|-- LICENSE
|-- README.md

Then you can run chas list --package src.

Prometheus

When starting the server with option --http-server, chas automatically opens up Prometheus metrics endpoint on /metrics. This allows you to easily monitor your chas script with Prometheus and complementary tools like Grafana, Alertmanager etc. The two metrics gathered are Counter-type objects named job_runs_total and job_runs_status_total, first denoting the number of times a job was run and the second also counting their statuses, either failed or succeeded.

Troubleshooting

What to do in case of ModuleNotFound error?

  • This can happen due to incorrect PYTHONPATH environment variable. Make sure current working directory is in there. You can check it by echo $PYTHONPATH. Otherwise to append current working directory, run export PYTHONPATH="${PYTHONPATH}:${PWD}".