Framework for creating and running cron jobs.
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 (specific time, once a day):
from chas import chas @chas.job("08:00") def print_hello_world(): print("Hello, World!")
from chas import chas @chas.job("*/10 * * * *") 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
chas start --http-server
Chas is convenient even from running jobs from your command line. You can do
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
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
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.
When starting the server with option
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_status_total, first denoting the number of times a job was run and the second also counting their statuses, either
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
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size chas-0.6.0-py3-none-any.whl (141.5 kB)||File type Wheel||Python version py3||Upload date||Hashes View|
|Filename, size chas-0.6.0.tar.gz (140.5 kB)||File type Source||Python version None||Upload date||Hashes View|