Cronico
Cronico is a lightweight, YAML-based task scheduler for Unix-like systems.
It lets you define recurring jobs with flexible cron expressions — supporting traditional minute-based syntax, extended formats with seconds, and common shorthand aliases (@daily, @hourly, etc.).
Tasks can include:
- Retry policies with configurable attempts.
- Timeouts to kill long-running processes.
- Environment injection from .env files or inline variables.
- Working directory control per task.
- Streaming or buffered logs for stdout/stderr.
Cronico is designed to run as a long-lived daemon (via systemd or similar) and can reload its configuration on SIGHUP without restarting the process.
tasks:
example_task:
description: |
Classic cron expression: every 5 minutes
cron: "*/5 * * * *"
command: "echo 'Hello, World!'"
retry_on_error: true
max_attempts: 3
env_file: ".env"
timeout: 60 # seconds
working_dir: "/path/to/dir"
environment:
MY_VAR: "value"
custom_env:
cron: "*/5 * * * *"
environment:
GREETING: "Hola"
command: |
echo "$GREETING from Bash at $(date)"
every_minute_at_second_10:
description: |
Extended with seconds: every minute, at the 10th second
cron:
minute: "*"
hour: "*"
day: "*"
month: "*"
weekday: "*"
second: 10
command: "echo 'Run at second 10 of every minute'"
every_30_seconds:
description: |
Classic with seconds: every 30 seconds
cron: "*/1 * * * * 0,30"
command: "echo 'This runs at second 0 and 30 of each minute'"
daily_with_seconds:
description: |
Daily at 03:00:15
cron:
minute: 0
hour: 3
day: "*"
month: "*"
weekday: "*"
second: 15
command: "echo 'Daily at 03:00:15'"
shorthand:
description: |
Shorthand: daily, at 00:00
cron: "@daily"
command: |
echo "Supported aliases:"
echo "- @yearly: 0 0 1 1 *"
echo "- @annually: 0 0 1 1 *"
echo "- @monthly: 0 0 1 * *"
echo "- @weekly: 0 0 * * 0"
echo "- @daily: 0 0 * * *"
echo "- @midnight: 0 0 * * *"
echo "- @hourly: 0 * * * *"
with_shebang:
description: |
You can use a shebang to specify the interpreter to use.
cron: "*/10 * * * *"
command: |
#!/usr/bin/env python3
import datetime
print("Hello from Python at", datetime.datetime.now())
another_shebang_example:
description: |
Another one...
cron: "*/10 * * * *"
command: |
#!/usr/bin/env perl
use strict;
use warnings;
my ($sec,$min,$hour) = localtime();
print "Hello from Perl at $hour:$min:$sec\n";
and_another_shebang_example:
description: |
I think you get the idea.
cron: "*/10 * * * *"
command: |
#!/usr/bin/env perl
use strict;
use warnings;
my ($sec,$min,$hour) = localtime();
print "Hello from Perl at $hour:$min:$sec\n";
Release files for cronico 0.9.18
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cronico-0.9.18.tar.gz | 9.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cronico-0.9.18-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.7 kB
Release files / cronico-0.9.18.tar.gz
| Download URL | cronico-0.9.18.tar.gz |
|---|---|
| Size | 9.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8a6f903834861cab45207cb97412ddb3d24f642917b494918e4ac99de602be19
|
|
BLAKE2b-256 checksum How to use checksums |
306c09d1093b17dd84bb26968955bdd9a3edb6dd97fe33d2ded886ef26ab7e20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / cronico-0.9.18-py3-none-any.whl
| Download URL | cronico-0.9.18-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
62146cefb69d3be678f973ee32edd3c8db61877884d4804306a908b3305e44ad
|
|
BLAKE2b-256 checksum How to use checksums |
21166192405f1ca56b57dfcb7f1497bd4bce747c78e0e4f8ff573d8df5a3073d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|