mdaleo404 62d505a17e Slim CI to a single PR job and fix environment-dependent tests
- Consolidate workflow into one job (Python 3.11/3.13), drop pip-audit,
  package build, and best-effort integration tests
- Make helper-ownership tests root-safe and the timefmt zone test
  deterministic across host timezones
2026-09-25 11:43:55 +01:00
2026-09-25 11:16:19 +01:00
2026-09-25 11:16:19 +01:00
2026-09-25 11:16:19 +01:00
2026-09-25 11:16:19 +01:00
2026-09-24 16:07:35 +00:00
2026-09-25 11:16:19 +01:00
2026-09-25 11:16:19 +01:00
2026-09-25 11:16:19 +01:00
2026-09-25 11:16:19 +01:00
2026-09-25 11:16:19 +01:00

Licence Gitea Release pre-commit

schedls

schedls logo

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

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

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

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.

S
Description
Inspect and manage Linux scheduled jobs
Readme GPL-3.0
242 KiB
0.1.0
Latest
2026-09-25 10:27:53 +00:00
Languages
Python 100%