schedls
Inspect and manage the things Linux runs later.
schedls is a CLI tool for inspecting and managing cron jobs and
systemd timers through one transparent interface. It is a management and
inspection layer over the operating system's native schedulers — it is not a
daemon, not a queue, and not a replacement scheduler.
$ schedls
NAME SCHEDULE NEXT BACKEND SCOPE STATUS
backup daily at 02:00 tomorrow 02:00 systemd user waiting
cleanup 0 4 * * 0 — cron user active
logrotate daily — systemd system waiting
If you uninstall schedls, everything it created keeps working: a timer is an
ordinary systemd unit, and a cron job is an ordinary crontab entry.
Install
$ pipx install schedls
# or
$ pip install --user schedls
python -m schedls works too. Zero runtime dependencies; Python 3.11+.
Examples
Discover everything visible to you:
$ schedls
$ schedls --system
$ schedls --backend cron
Explore a native calendar expression without creating anything:
$ schedls calendar 'Mon..Fri 02:30'
$ schedls calendar --next 10 --utc daily
Create a user systemd timer:
$ schedls new backup --timer --daily 02:00 --persistent -- /usr/local/bin/backup /srv/data
Create a cron job:
$ schedls new cleanup --cron --cron-expr '0 4 * * 0' -- /usr/local/bin/cleanup
Create a system cron drop-in as root (runs as root unless --run-as is given):
$ sudo schedls new updates --cron --system --daily 03:00 -- /usr/local/bin/updates
Prefer to be guided? Add -i/--interactive to new or edit and any
omitted field is prompted for. Flags you do pass become pre-filled defaults:
$ schedls new backup -i
$ schedls edit backup -i
For new, the wizard asks for the scope (user or system) unless --user or
--system was given; a system cron job then asks which user it should run as
(default root). Interactive mode is line-based (no external editor or pager),
requires a terminal, and cannot be combined with --json. The collected values
are shown in the usual preview and still require confirmation before anything
is written.
Inspect, change, disable, remove:
$ schedls show backup
$ schedls edit backup --daily 03:00
$ schedls disable backup
$ schedls rm backup
$ schedls logs backup
Check what this host can do:
$ schedls doctor
Every mutating command supports --dry-run, and --yes for scripts. Machine
output is available with --json.
Design promises
schedls does not:
- run a background daemon;
- listen on a network port;
- make network requests;
- automatically invoke
sudo; - execute discovered scheduled commands;
- open an editor or pager while managing jobs;
- use a shell internally for helper commands;
- modify unmanaged schedules by default.
See SECURITY.md and docs/security-model.md.
Documentation
- docs/cli.md — every command, option and exit code
- docs/architecture.md
- docs/security-model.md
- docs/systemd.md
- docs/cron.md
Development
$ poetry install
$ poetry run pre-commit install # check hooks on every commit
$ poetry run pre-commit run --all-files
$ poetry run pytest
$ poetry run mypy
Formatting and linting use ruff; security scanning uses Bandit; both run through pre-commit alongside trailing-whitespace, end-of-file, YAML and TOML checks. CI runs the same hooks on every push and pull request, followed by a strict type check, the test matrix (Python 3.11–3.14) and a package build. A scheduled workflow builds an SBOM and scans it with Grype.
Release files for schedls 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| schedls-0.2.0.tar.gz | 56.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| schedls-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 122.5 kB
Release files / schedls-0.2.0.tar.gz
| Download URL | schedls-0.2.0.tar.gz |
|---|---|
| Size | 56.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6713ff6e4d4133116e112ef10e14a43880e5207405aa1da82081f6612c196166
|
|
BLAKE2b-256 checksum How to use checksums |
7d692a4bc5cc0716308c940362bae7f4a11a53ade59b4ea4b3364a4cc5a1f8df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.5.0 CPython/3.14.7 Linux/7.2.7-100.fc43.x86_64
|
Release files / schedls-0.2.0-py3-none-any.whl
| Download URL | schedls-0.2.0-py3-none-any.whl |
|---|---|
| Size | 65.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
402fbcd177b1993c7308956c50e63ffdb57793197ba1433052d6c14efc747e8a
|
|
BLAKE2b-256 checksum How to use checksums |
2e93b168aac80367ac34055bbfbd70512bc3a6db2d3ab2b41ab115c70a4c87f9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.5.0 CPython/3.14.7 Linux/7.2.7-100.fc43.x86_64
|