Skip to content

Releases: Azentrius/cockpit-cronjobs

Cron Jobs 2.9.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 22:35
Immutable release. Only release title and notes can be modified.
d717692

The status follows converted jobs and the cron service, links to the page and shows in Cockpit's menu;
the page shows missed runs and when cron last started a job, records all jobs of a crontab at once and
can keep a job from starting while its previous run goes on (run recorder version 3).

  • Links for the Status Board: every item of the status carries a link to its place on the page:
    failed #/overview/results (the latest results, failures first), unrecorded
    #/overview/crontab (the root crontab, the other users' after it), cron #/overview/notices
    (where the page says that cron is not running). The tile goes to the link of its most important
    item.
  • The page follows its address: Cockpit keeps a page that is loaded and, when the Status Board
    jumps to it again, only changes its address. The page now listens to locationchanged: the tab at
    once, the card once the page has loaded and is shown. Every tab has an address (#/overview,
    #/timers, #/system), and a tab chosen on the page goes into it, so the link to the place shown
    before leads there again. Without a place the page opens on Overview as before; a path that is no
    place changes nothing.
  • Status in Cockpit's menu: the menu entry “Cron Jobs” carries Cockpit's own status icon (red: a
    job failed or cron is stopped; yellow: a warning, or the status is more than an hour old) with the
    summary as its tooltip, judged as the Status Board judges it; nothing to do, no icon. For this
    Cockpit loads the page hidden right after the login (preload); until it is opened it only reads
    /var/lib/cockpit-cronjobs/status.json (or status.de.json) every five minutes and runs nothing
    else.
  • Converted jobs: a run of a job converted to a systemd timer that failed in the last 24 hours, or
    lost its end, counts in failed, read from the journal of its service as the page reads it
    (R.parseJournal): systemd's own messages only, the last 20 runs. Before, a converted job left the
    status, since its line in the crontab is switched off. Only units the conversion wrote count, checked
    as back to cron checks them. Timers from root's crontab are named (nightly.timer); those from
    another user's crontab are only counted, since the name a conversion suggests for them begins with
    the user's.
  • Cron service: a new item cron, read as the page reads it: ok while the service runs; when it
    does not, danger if the crontabs have jobs, else warning. The summary then says so first.
  • Missed runs: when the last run of a recorded job succeeded but the next one its schedule names
    left no record five minutes after its time, the job is listed as missed, with the time it was due,
    after the failed ones and before the running ones. That is what a stopped cron, or a server that was
    down at the time, leaves behind; cron does not catch such runs up. The next run is cron's, clock
    changes and CRON_TZ included (C.nextRun); runs started by hand do not stand in for a scheduled
    one. A job with no recorded run yet is not judged: it is not known when recording began.
  • Record all: each crontab's card offers “Record all” while one of its enabled jobs does not record
    its runs. The dialog lists those jobs with their schedules and says how many cannot be recorded (a
    % in the command); confirmed, the run recorder (and for another user the directory for their runs)
    comes first, then one write of the crontab through the locked step with its backup, each job wrapped
    with an ID of its own (C.captureJobs). Every other line stays byte for byte; when a line changed
    meanwhile, nothing is written. What the status counts as unrecorded is then one click away.
  • Not starting while a run goes on: a new option in the dialog of a recorded job. The page puts
    the file no-overlap into the job's directory of runs, as its owner, after the crontab is written;
    the line in the crontab stays as it is, so older versions read it as before. The run recorder,
    version 3 (CRONJOBS_RUN_VERSION, the page offers the update as before), then checks each start
    under the lock it takes for its records: when a run of this job goes on (a run marker whose process
    is the recorder for this ID), the command does not run, the start goes into skipped.jsonl (the
    last 20) and the recorder ends with 75; a start by hand says so on its output. The runs dialog says
    that the job does not overlap and how many starts were skipped; a skipped start counts as one cron
    made for missed runs. Without the option nothing changes: the job overlaps as with cron.
  • Starts from cron's log: for a job that does not record its runs ("Not recorded · started …") and
    in a new column “Last start” of /etc/crontab, /etc/cron.d and the crontabs the page only shows.
    Cron logs each start as (USER) CMD (COMMAND); the page reads those of the last 35 days from the
    journal once per load, only cron's own (_UID=0, _COMM=cron or crond, which journald sets, so no
    one else can log a start), the newest of each, and matches them by user and by the command as cron
    logs it (C.loggedCommand: before the first unescaped %, bytes escaped as cron's mkprint does).
    How a run ended is not in the log, and the page says so. Without the journal it shows dashes.
  • Tests: the unit test checks the status helper against the page's journal parser with the sample
    of systemd 259 and made-up runs (failed, killed, running, lost, older than a day, beyond the last 20,
    lines of the job that look like systemd's), units that are not a conversion's, other users' timers
    and the cron service, with dash and bash, mawk and gawk; the sample moved to
    test/journal-sample.js. The end-to-end test converts a failing job, finds its timer in the status,
    stops cron for real and finds that in the status and on the page. A unit test for R.missed (within
    and past the five minutes, a run that came, runs by hand, no run, no next run, the day summer time
    ends) and a browser test (the order, the title, the runs it opens). For record all a unit test of
    C.captureJobs (no ID given twice, a %, recorded jobs and other lines as they were) and a browser
    test (the dialog, cancelling, one write with its backup, another user's crontab). For not starting
    while a run goes on, the recorder with dash and bash (skipped silently or with a word by hand, the
    last 20 skips, beside its own slow run, not held back by another job, a dead marker or without the
    option), R.parseRuns, and a browser test (only with recording, set and cleared as root and as
    another user, the runs dialog, a failure to set it). For cron's log, unit tests of C.mkprints,
    C.loggedCommand and C.parseCronLog, the script with dash and bash against a stand-in for
    journalctl (the newest of each, other messages left out, the fields it filters on), a browser test
    (an unrecorded job, a % job, bytes beyond ASCII, another user's start, no log), and the end-to-end
    test finds the start of a job Debian's cron ran.
  • Tests for the links and the menu: test/menu.test.js (new, Node): the icon for every state, an
    item worse than the whole, an item out of date (in German and English, with the time), what the
    board ignores, the file of the page's language, the start once shown, and every link of the helper
    a place of the page with an element to scroll to. test/status.test.js: the link of every item.
    The browser tests open each place, follow changes of the address while the page stays loaded, the
    tab chosen on the page in the address, paths that are no place, a reload that scrolls nowhere, the
    page loaded hidden at a place, and the icon (failed, out of date, English, no file, hidden). The
    end-to-end test loads the page without Cockpit's shell, as before; it starts there as well, since
    cockpit-ws drops the icon's notify without a shell.

Install

From the Azentrius package repository (Debian, Ubuntu, Fedora, RHEL): set up https://packages.azentrius.com once, then install Cron Jobs in Cockpit under Applications, or with sudo apt install cockpit-cronjobs or sudo dnf install cockpit-cronjobs. The repository takes this release within an hour. It has no openSUSE packages.

From the files of this release (on openSUSE the only way): download the package and SHA256SUMS, check that the download is complete and that this repository's release workflow built it, then install it:

sha256sum --ignore-missing -c SHA256SUMS
gh attestation verify <file> --repo Azentrius/cockpit-cronjobs

sudo apt install ./cockpit-cronjobs_2.9.0-1_all.deb                              # Debian, Ubuntu
sudo dnf install ./cockpit-cronjobs-2.9.0-1.noarch.rpm                           # Fedora, RHEL
sudo zypper install --allow-unsigned-rpm ./cockpit-cronjobs-2.9.0-1.noarch.rpm   # openSUSE

The .rpm carries no package signature; the two checks take its place. The tests install the packages on Debian 13 and Fedora 43 only.

Other systems: sudo tar -xzf cockpit-cronjobs-2.9.0.tar.gz -C /usr/share/cockpit.

Cron Jobs 2.8.1

Choose a tag to compare

@github-actions github-actions released this 19 Oct 22:45
Immutable release. Only release title and notes can be modified.
7be5f3a

The list of recorded runs reads at most the last 64 KiB of each runs.jsonl, so another user can no
longer make it take the server's memory or send the page gigabytes.

  • Runs of other users' jobs: the list is read as root, and the runs of another user's jobs lie in
    /var/lib/cockpit-cronjobs/users/USER/runs/ID, which that user owns. The page checked that
    runs.jsonl is a regular file and no link, then took its last 20 lines with tail -n 20, which keeps
    what it reads until it has seen 20 line ends. A user who swapped the file for a link to /dev/zero
    right after the check had root's tail take memory without limit for five seconds, and a file of
    gigabytes without line ends went to the page whole. Now the last 64 KiB are taken first
    (tail -c 65536 | tail -n 20), as the status helper of 2.8.0 does; 20 records are a few KiB. The
    other reads as root in these directories had a bound already: the run markers (head -c 4096) and
    the disk use (du under timeout); a run's output is read as its user. A unit test, with dash and
    bash, swaps the file for a link to /dev/zero between the check and the read (under a memory limit)
    and lists a file of 32 MiB.
  • Status for the Status Board: 2.8.0 was not released on its own; its status comes with this
    release. Failed jobs of the last 24 hours and jobs without recording are worked out as root every
    15 minutes by cockpit-cronjobs-status.timer, which the .deb and .rpm turn on, and can be read
    without administrative access. Details under 2.8.0 in the changelog.

Install

From the Azentrius package repository (Debian, Ubuntu, Fedora, RHEL): set up https://packages.azentrius.com once, then install Cron Jobs in Cockpit under Applications, or with sudo apt install cockpit-cronjobs or sudo dnf install cockpit-cronjobs. The repository takes this release within an hour. It has no openSUSE packages.

From the files of this release (on openSUSE the only way): download the package and SHA256SUMS, check that the download is complete and that this repository's release workflow built it, then install it:

sha256sum --ignore-missing -c SHA256SUMS
gh attestation verify <file> --repo Azentrius/cockpit-cronjobs

sudo apt install ./cockpit-cronjobs_2.8.1-1_all.deb                              # Debian, Ubuntu
sudo dnf install ./cockpit-cronjobs-2.8.1-1.noarch.rpm                           # Fedora, RHEL
sudo zypper install --allow-unsigned-rpm ./cockpit-cronjobs-2.8.1-1.noarch.rpm   # openSUSE

The .rpm carries no package signature; the two checks take its place. The tests install the packages on Debian 13 and Fedora 43 only.

Other systems: sudo tar -xzf cockpit-cronjobs-2.8.1.tar.gz -C /usr/share/cockpit.

Cron Jobs 2.7.4

Choose a tag to compare

@github-actions github-actions released this 18 Oct 21:03
Immutable release. Only release title and notes can be modified.
adf486b

Azentrius moves to azentrius.com; the page itself works as before.

  • Signature: the word mark links to azentrius.com.
  • Package repository: README and release notes name packages.azentrius.com, the new address of the
    Azentrius package repository; packages.azentrius.de keeps serving the same packages.
  • Maintainer of the .deb and .rpm: support@azentrius.com.

Install

From the Azentrius package repository (Debian, Ubuntu, Fedora, RHEL): set up https://packages.azentrius.com once, then install Cron Jobs in Cockpit under Applications, or with sudo apt install cockpit-cronjobs or sudo dnf install cockpit-cronjobs. The repository takes this release within an hour. It has no openSUSE packages.

From the files of this release (on openSUSE the only way): download the package and SHA256SUMS, check that the download is complete and that this repository's release workflow built it, then install it:

sha256sum --ignore-missing -c SHA256SUMS
gh attestation verify <file> --repo Azentrius/cockpit-cronjobs

sudo apt install ./cockpit-cronjobs_2.7.4-1_all.deb                              # Debian, Ubuntu
sudo dnf install ./cockpit-cronjobs-2.7.4-1.noarch.rpm                           # Fedora, RHEL
sudo zypper install --allow-unsigned-rpm ./cockpit-cronjobs-2.7.4-1.noarch.rpm   # openSUSE

The .rpm carries no package signature; the two checks take its place. The tests install the packages on Debian 13 and Fedora 43 only.

Other systems: sudo tar -xzf cockpit-cronjobs-2.7.4.tar.gz -C /usr/share/cockpit.

Cron Jobs 2.7.3

Choose a tag to compare

@github-actions github-actions released this 18 Oct 15:43
Immutable release. Only release title and notes can be modified.
ea29917

The page brings its own monospace font, so commands and paths no longer fall back to another font under
Cockpit 314 (Ubuntu 24.04).

  • Red Hat Mono comes with the page: commands, paths and schedules are set in Red Hat Mono, as the
    design system asks, from the page's own RedHatMono.woff2 (a Latin subset, SIL Open Font License 1.1,
    in OFL.txt and NOTICE). Until now azentrius.css took the font from Cockpit's
    /cockpit/static/fonts/RedHatMono/RedHatMonoVF.woff2, which Cockpit 314 from Ubuntu 24.04 does not
    have: every load of the page got a 404 for it, and code was shown in a fallback (Courier New or the
    browser's monospace font). The shared design files gain
    the font file; the browser tests no longer stand in a font for Cockpit's, and a unit test checks that
    every url() in the stylesheets names a file of the page.

Install

From the Azentrius package repository (Debian, Ubuntu, Fedora, RHEL): set up https://packages.azentrius.de once, then install Cron Jobs in Cockpit under Applications, or with sudo apt install cockpit-cronjobs or sudo dnf install cockpit-cronjobs. The repository takes this release within an hour. It has no openSUSE packages.

From the files of this release (on openSUSE the only way): download the package and SHA256SUMS, check that the download is complete and that this repository's release workflow built it, then install it:

sha256sum --ignore-missing -c SHA256SUMS
gh attestation verify <file> --repo Azentrius/cockpit-cronjobs

sudo apt install ./cockpit-cronjobs_2.7.3-1_all.deb                              # Debian, Ubuntu
sudo dnf install ./cockpit-cronjobs-2.7.3-1.noarch.rpm                           # Fedora, RHEL
sudo zypper install --allow-unsigned-rpm ./cockpit-cronjobs-2.7.3-1.noarch.rpm   # openSUSE

The .rpm carries no package signature; the two checks take its place. The tests install the packages on Debian 13 and Fedora 43 only.

Other systems: sudo tar -xzf cockpit-cronjobs-2.7.3.tar.gz -C /usr/share/cockpit.

Cron Jobs 2.7.2

Choose a tag to compare

@github-actions github-actions released this 18 Oct 09:04
Immutable release. Only release title and notes can be modified.
d7e34e5

The archive of a release carries the license and the notice; the page itself is unchanged.

  • Licenses in the archive: cockpit-cronjobs-VERSION.tar.gz contains LICENSE and NOTICE (as
    cronjobs/LICENSE and cronjobs/NOTICE, listed in SHA256SUMS), as the .deb and .rpm already do.

Install

From the Azentrius package repository: set up https://packages.azentrius.de once, then install Cron Jobs in Cockpit under Applications, or with sudo apt install cockpit-cronjobs or sudo dnf install cockpit-cronjobs. The repository takes this release within an hour.

From the files of this release: Debian and Ubuntu sudo apt install ./cockpit-cronjobs_2.7.2-1_all.deb, Fedora, RHEL and openSUSE sudo dnf install ./cockpit-cronjobs-2.7.2-1.noarch.rpm.
Other systems: sudo tar -xzf cockpit-cronjobs-2.7.2.tar.gz -C /usr/share/cockpit.

Check the download against SHA256SUMS, and that it was built by this repository's release workflow:

sha256sum --ignore-missing -c SHA256SUMS
gh attestation verify <file> --repo Azentrius/cockpit-cronjobs

Cron Jobs 2.7.1

Choose a tag to compare

@github-actions github-actions released this 18 Oct 04:16
Immutable release. Only release title and notes can be modified.
3f57182

Fixes: conversions to one name at the same time, next runs when the clock changes, steps after a single
value, and CRON_TZ in /etc/crontab and /etc/cron.d.

  • Conversions at the same time: two conversions to the same name, from two browsers or tabs, could
    both report success, the second overwriting the first one's units; if one of them failed afterwards,
    taking back its units could remove those of the other, whose crontab line was already off. Now each
    conversion owns the units it writes: they are only created when the name is free, and only the
    conversion that wrote them starts their timer or takes them back, all under the crontab lock
    (/var/lib/cockpit-cronjobs/converting/ says which one while it is under way). Back to cron removes
    units under the same lock.
  • When the clock changes: next runs and the timeline follow cron. When summer time ends, the repeated
    hour runs only the jobs with * in the minute or hour field again (until now a job every minute went
    missing for that hour), and jobs at a fixed time run once; when it starts, jobs at a fixed time of the
    skipped hour run right after the change, the others do not catch up. With cronie, jobs with CRON_TZ
    run as cronie runs them.
  • Steps need * or a range: a schedule like 5/10 * * * * was accepted, but Debian's cron and cronie
    both refuse it; the form now says so and names */10 and 5-59/10. A timer described in words no
    longer comes out as such a schedule.
  • CRON_TZ in system crontabs: with cronie, CRON_TZ in /etc/crontab and /etc/cron.d now counts
    for the jobs below it in the same file: the timeline draws them at the right time, and they show their
    zone with the schedule.
  • Tests: next runs are compared with a port of cron's main loop around every clock change of 2026 in four
    zones; two conversions of one name at the same time, and one that fails after another finished, run
    against the root steps with dash and bash.

Install

From the Azentrius package repository: set up https://packages.azentrius.de once, then install Cron Jobs in Cockpit under Applications, or with sudo apt install cockpit-cronjobs or sudo dnf install cockpit-cronjobs. The repository takes this release within an hour.

From the files of this release: Debian and Ubuntu sudo apt install ./cockpit-cronjobs_2.7.1-1_all.deb, Fedora, RHEL and openSUSE sudo dnf install ./cockpit-cronjobs-2.7.1-1.noarch.rpm.
Other systems: sudo tar -xzf cockpit-cronjobs-2.7.1.tar.gz -C /usr/share/cockpit.

Check the download against SHA256SUMS, and that it was built by this repository's release workflow:

sha256sum --ignore-missing -c SHA256SUMS
gh attestation verify <file> --repo Azentrius/cockpit-cronjobs

Cron Jobs 2.7.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 01:58
Immutable release. Only release title and notes can be modified.
2d373b3

The page follows the Azentrius design system more closely: states, controls, alerts and texts.

  • Running is a good state: a job or timer that runs shows "Running" as a success label with the
    check-circle icon, no longer as a hint with sync-alt. "Ignored" in /etc/cron.d carries the warning
    triangle.
  • Checkboxes in forms: "Record result and output", "Job is active" and "Catch up on missed runs" are
    checkboxes, since they only apply with Save or Convert. The switches in the tables stay: they apply at
    once.
  • Alerts above their card: that cron is not installed, that a crontab or the systemd timers could not
    be read, or that a crontab opened read-only now shows above the card it is about, and the card says what
    it waits for. These errors also say how to fix them, as do those of the journal, of an output and of the
    backups.
  • Field errors once a field is left: the edit dialog, and the name in the convert dialog, show an error
    when the field is left or on saving or converting, not while typing. "Convert job" no longer turns grey
    for an invalid name; it leads back to the field.
  • Run recorder: it is updated with "Update" and the arrow-circle-up icon. "Update" and "Install run
    recorder" are link buttons in their alerts.
  • Links out of the page: "Open in Services" and the systemd timer a job was converted to carry the
    external-link-alt icon after the text. Other links, such as "Try again" or "Record runs", have no icon.
  • Buttons name their object: "Run job", "Stop job", "Convert job", "Record runs", "Review runs",
    "Remove all runs" and "Install run recorder".
  • German texts: errors address the reader as "Sie" ("Geben Sie einen Befehl ein.") instead of the
    infinitive.
  • Sizes: in KiB, MiB and GiB, which they always were (1024 based), with a decimal comma in German.
  • No systemd timers: the systemd timers tab shows an empty state in a card and says whether the server
    has no systemd or no timers.
  • Details: every control is at least 29 px high on the desktop (44 px on phones), the inline links and
    the result labels too; the row menu shows focus as a 2 px ring; spacing comes from the scale of
    4, 8, 16, 24, 32 and 48 px only; notes in the changes of a backup are no longer italic.
  • Signature: the word mark links to azentrius.de; a link to the source code follows version and host.
  • Icons: icons.js, NOTICE and the README name where the icons come from (Font Awesome Free 5.15.4 by
    Fonticons, Inc., through @patternfly/react-icons 6.4.0). The license text, CC BY 4.0, comes along as
    CC-BY-4.0-Font-Awesome.txt, installed with the page and in the packages' documentation.
  • Tests: the browser tests check the checkboxes, the alerts above their cards, field errors only after a
    field is left, controls of at least 29 px, the signature and an empty state for the timers.
  • Name with the dot: the page title reads "Cron Jobs." with the dot of the Azentrius wordmark, the way
    the design system now shows a product name without a suffix. The menu, the signature and AppStream keep
    the plain "Cron Jobs", and the README and NOTICE drop "for Cockpit" from the name.
  • Shared design files: azentrius.css gains az-page-title--dot, the project-page classes
    az-btn--lg and az-eyebrow and their spacing tokens; tools/build-packages.sh can name packages
    that a package replaces under a new name (CONFLICTS in packaging/package.conf).
  • Tables no longer widen the page: the table wrapper is positioned (position: relative on
    .az-table-wrap, as in the design system), so the hidden helper texts in a table head stay inside it
    when the table scrolls sideways.

Install

From the Azentrius package repository: set up https://packages.azentrius.de once, then install Cron Jobs in Cockpit under Applications, or with sudo apt install cockpit-cronjobs or sudo dnf install cockpit-cronjobs. The repository takes this release within an hour.

From the files of this release: Debian and Ubuntu sudo apt install ./cockpit-cronjobs_2.7.0-1_all.deb, Fedora, RHEL and openSUSE sudo dnf install ./cockpit-cronjobs-2.7.0-1.noarch.rpm.
Other systems: sudo tar -xzf cockpit-cronjobs-2.7.0.tar.gz -C /usr/share/cockpit.

Check the download against SHA256SUMS, and that it was built by this repository's release workflow:

sha256sum --ignore-missing -c SHA256SUMS
gh attestation verify <file> --repo Azentrius/cockpit-cronjobs

Cron Jobs 2.6.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 23:02
Immutable release. Only release title and notes can be modified.
bc345a0

Packages: Cron Jobs comes as cockpit-cronjobs (.deb and .rpm) from the Azentrius package
repository, packages.azentrius.de, and Cockpit lists it under Applications.

  • Packages: every release has cockpit-cronjobs_VERSION-1_all.deb and
    cockpit-cronjobs-VERSION-1.noarch.rpm next to the archive, in SHA256SUMS and with a signed build
    provenance. They install the page to /usr/share/cockpit/cronjobs and need cockpit-bridge and a
    cron daemon (cron or another cron-daemon on Debian and Ubuntu, cronie or cron in RPM). The
    builds are reproducible: CI builds them twice and compares the bytes, then installs them on Debian 13
    and Fedora 43.
  • Cockpit's Applications page: the packages carry AppStream data (de.azentrius.cronjobs, English
    and German). With the package repository set up (one package, azentrius-repository), Cockpit lists
    Cron Jobs under Applications and installs it with a click, and the system's updates keep it current.
    The repository takes a package only after checking that this repository's release workflow built it.
  • Installation: the README installs from the package repository, from the files of a release or
    from the source, and says how to switch from an earlier installation.

Install

From the Azentrius package repository: set up https://packages.azentrius.de once, then install Cron Jobs in Cockpit under Applications, or with sudo apt install cockpit-cronjobs or sudo dnf install cockpit-cronjobs. The repository takes this release within an hour.

From the files of this release: Debian and Ubuntu sudo apt install ./cockpit-cronjobs_2.6.0-1_all.deb, Fedora, RHEL and openSUSE sudo dnf install ./cockpit-cronjobs-2.6.0-1.noarch.rpm.
Other systems: sudo tar -xzf cockpit-cronjobs-2.6.0.tar.gz -C /usr/share/cockpit.

Check the download against SHA256SUMS, and that it was built by this repository's release workflow:

sha256sum --ignore-missing -c SHA256SUMS
gh attestation verify <file> --repo Azentrius/cockpit-cronjobs

Cron Jobs 2.5.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 20:54
Immutable release. Only release title and notes can be modified.
2f1754f

Results at a glance: the latest result of every recorded job and systemd timer at the top of the overview,
failures first, and the runs of every timer from the journal.

  • The latest results: a new card at the top of the overview lists the last run of every recorded job
    (in every crontab the page shows) and of every active systemd timer: failed and aborted ones first,
    newest first, then those running, then the successful ones, folded away behind a button. A result opens
    the runs of its job or timer. The page reads the runs and the timers' results again every half minute,
    so a failure shows within a minute without reloading; coming back to the page with a dialog open, it
    reads them too.
  • Runs from the journal: every systemd timer gets the runs dialog of a recorded job, from the journal
    of its service: start, duration, result and output. The systemd timers tab has a button for it. A job
    converted to a timer keeps its history: its row shows the timer's last run, and its runs dialog lists
    the runs recorded before the conversion together with those of its service since.
  • The last run of a timer is the later of its last trigger and the last start of its service, so a
    service started by hand shows as run.
  • Fix: jobs with rare schedules, such as yearly ones or those on the 29th of February, could not be
    converted to a systemd timer: the check compared five runs, but computed cron's own only 800 days ahead.
    It now computes them up to the last run systemd lists.
  • Tests: the end-to-end test lets a recorded job and a timer fail under the real cron and systemd and
    finds both in the latest results without reloading, reads runs from the real journal, and converts a
    yearly and a leap day job; the journal parser is tested with real output of systemd 259.

Install

curl -LO https://github.com/Azentrius/cockpit-cronjobs/releases/download/v2.5.0/cockpit-cronjobs-2.5.0.tar.gz
curl -LO https://github.com/Azentrius/cockpit-cronjobs/releases/download/v2.5.0/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
sudo tar -xzf cockpit-cronjobs-2.5.0.tar.gz -C /usr/share/cockpit

Check that the archive was built by this repository's release workflow:

gh attestation verify cockpit-cronjobs-2.5.0.tar.gz --repo Azentrius/cockpit-cronjobs

Cron Jobs 2.4.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 21:58
Immutable release. Only release title and notes can be modified.
9c2d06b

Crontabs of other users, with administrative access: changed, run, recorded and converted with the same
safety as root's. Run now and conversions now give a job the environment cron gives it.

  • Crontabs of other users: with administrative access, every other user's crontab gets a card of its
    own on the overview and is changed the same way as root's: through crontab -u USER in one locked
    step, after a backup of its own (the last ten in /var/lib/cockpit-cronjobs/backups/users/USER/),
    which can be compared and restored like root's. Without administrative access they are not shown at
    all. /etc/crontab and /etc/cron.d stay read-only.
  • Run now as that user: another user's job runs as that user (through runuser), in the user's
    home, with cron's environment for that user.
  • Recording for other users: the run recorder (version 2; the page installs it again) records a job
    of another user as that user, in /var/lib/cockpit-cronjobs/users/USER/runs/, a directory that
    belongs to the user; /var/lib/cockpit-cronjobs and its users directory become mode 711. Cron Jobs
    reads output and removes runs there as that user, and lists only what has the form of runs.
  • Conversion for other users: the timer runs the job with User=USER, in the user's home. Units
    name the crontab they come from, and back to cron removes only units converted from the crontab whose
    note it follows, so a note a user writes into their own crontab cannot reach anyone else's timer. The
    systemd timers tab names the crontab a timer came from.
  • Cron's environment: run now and conversions read from the server how cron builds a job's
    environment (PAM's variables from /etc/environment and, on Debian and Ubuntu, the locale; the
    crontab's variables; cron's own) and use exactly that. On Ubuntu, which starts cron with -P, PATH
    now comes from /etc/environment as under cron, and USER is no longer set where cron sets none. A
    converted unit lists the variables and unsets what systemd would add on its own. The run dialog names
    the other variables it sets.
  • Tests: the end-to-end test covers a second user for editing, backups, run now, recording and
    conversion, compares the whole environment of a job under cron with run now and with a converted
    unit, and tries a link in a user's run directory and a forged conversion note.

Install

curl -LO https://github.com/Azentrius/cockpit-cronjobs/releases/download/v2.4.0/cockpit-cronjobs-2.4.0.tar.gz
curl -LO https://github.com/Azentrius/cockpit-cronjobs/releases/download/v2.4.0/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
sudo tar -xzf cockpit-cronjobs-2.4.0.tar.gz -C /usr/share/cockpit

Check that the archive was built by this repository's release workflow:

gh attestation verify cockpit-cronjobs-2.4.0.tar.gz --repo Azentrius/cockpit-cronjobs