Cron job monitor for humans — view, toggle, and tail your cron jobs from a browser
Project description
cronpan
Cron job monitor for humans — no daemon, no docker, no database, just your crontab.
Install
pip install cronpan
Run
cronpan
Opens at http://localhost:7878. On a headless machine (VM, server) it won't try to open a browser — just visit the URL from your own machine at http://your-server-ip:7878.
Change the port:
cronpan --port 9000
What you can do
- View all your cron jobs in one place
- Enable / disable jobs without editing the crontab manually
- Rename jobs with a display name
- Enable built-in logging — captures output to daily log files at
~/.cronlogs/ - Set a custom log file path for jobs that already write their own logs
- View system jobs from
/etc/cron.d/(read-only)
Logging
Built-in logging
Click enable logging on any job. cronpan wraps the command with a logger script that timestamps every line of output and writes daily log files:
~/.cronlogs/
job_name/
20260310.log
20260311.log
Custom log file
If your script already writes its own log file, click set log file and enter the full path. cronpan will read it as-is and show it in the UI. The path is stored as a comment in your crontab:
* * * * * /path/to/script.py #[LOGPATH] /var/log/myjob.log
Keep it running (Linux / VM)
To run cronpan as a background service that starts on boot:
cronpan --install-service
This writes a systemd unit file to /tmp/cronpan.service and prints the exact commands to install it:
sudo cp /tmp/cronpan.service /etc/systemd/system/cronpan.service
sudo systemctl daemon-reload
sudo systemctl enable cronpan
sudo systemctl start cronpan
cronpan runs as your regular user — no root needed at runtime.
To stop and remove the service:
sudo systemctl stop cronpan
sudo systemctl disable cronpan
sudo rm /etc/systemd/system/cronpan.service
Crontab conventions
cronpan reads and writes your real crontab. It uses comments to store metadata:
#[DESCRIPTION] My Job Name
* * * * * /path/to/script.py
#[DISABLED] * * * * * /path/to/script.py
#[DELETED] * * * * * /path/to/script.py
* * * * * /path/to/script.py #[LOGPATH] /var/log/myjob.log
Docker (for testing)
docker build -t cronpan .
docker run -p 7878:7878 cronpan
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cronpan-0.2.0.tar.gz.
File metadata
- Download URL: cronpan-0.2.0.tar.gz
- Upload date:
- Size: 23.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
99b118a1b830e93a1e2e32ab20b9db644dffeb50d75b4e7a8906dc1ab0fe4d07
|
|
| MD5 |
9cab0809d64cc554dd396db4ea4a3dbb
|
|
| BLAKE2b-256 |
c741bef668f5257965a27c9df8ddad184f92cc1ae955cad19d921be81009363d
|
Provenance
The following attestation bundles were made for cronpan-0.2.0.tar.gz:
Publisher:
publish.yml on lukasanukvari/cronpan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cronpan-0.2.0.tar.gz -
Subject digest:
99b118a1b830e93a1e2e32ab20b9db644dffeb50d75b4e7a8906dc1ab0fe4d07 - Sigstore transparency entry: 1092173452
- Sigstore integration time:
-
Permalink:
lukasanukvari/cronpan@7f449b679dce8853e9c1729e78f7b2ace0245563 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/lukasanukvari
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7f449b679dce8853e9c1729e78f7b2ace0245563 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cronpan-0.2.0-py3-none-any.whl.
File metadata
- Download URL: cronpan-0.2.0-py3-none-any.whl
- Upload date:
- Size: 23.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
047d2070d6d8b27cdbc0e359ac3df56261f2f4d965d3f0b476300d7d536e1091
|
|
| MD5 |
e2efff6b2915a7a80a68ce1b900a917c
|
|
| BLAKE2b-256 |
29d9bf1cd9054d4f70c7ef404f4c67301210b4867391485a2478a1b8b671e132
|
Provenance
The following attestation bundles were made for cronpan-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on lukasanukvari/cronpan
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cronpan-0.2.0-py3-none-any.whl -
Subject digest:
047d2070d6d8b27cdbc0e359ac3df56261f2f4d965d3f0b476300d7d536e1091 - Sigstore transparency entry: 1092173458
- Sigstore integration time:
-
Permalink:
lukasanukvari/cronpan@7f449b679dce8853e9c1729e78f7b2ace0245563 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/lukasanukvari
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7f449b679dce8853e9c1729e78f7b2ace0245563 -
Trigger Event:
push
-
Statement type: