# Module to manage Scheduled Jobs under Systemd

**URL:** <https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433>\
**Category:** Blue Skies\
**Created:** [June 16, 2026, 6:04am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433 "2026-06-16T06:04:33Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Randomz](https://cdn.forum.virtualmin.com/letter_avatar_proxy/v4/letter/r/839c29/32.png) [@Randomz](https://forum.virtualmin.com/u/Randomz)\
**Post date:** [June 16, 2026, 6:04am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/1 "2026-06-16T06:04:33Z")

</div>

Cron jobs are pretty much disappearing and being replaced by Systemd timers which have more functionality like pre/post/deploy hooks.

I think a module for managing this would be quite useful, it may not be long before the old cron jobs become redundant.

---

<div class="post-metadata">

**Author:** ![stefan1959](https://cdn.forum.virtualmin.com/letter_avatar_proxy/v4/letter/s/49beb7/32.png) [@stefan1959](https://forum.virtualmin.com/u/stefan1959)\
**Post date:** [June 16, 2026, 7:50am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/2 "2026-06-16T07:50:28Z")

</div>

> [@Randomz](#):
>
> Cron jobs are pretty much disappearing

What gave you that idea, has a OS said they dropping it.  
Cpanel still use it and have heard no news they dropping it.

---

<div class="post-metadata">

**Author:** ![shoulders](https://cdn.forum.virtualmin.com/user_avatar/forum.virtualmin.com/shoulders/32/10086_2.png) [@shoulders](https://forum.virtualmin.com/u/shoulders)\
**Post date:** [June 16, 2026, 7:54am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/3 "2026-06-16T07:54:48Z")

</div>

whether cron is going away or not, maybe this is something that should be added to the todo list. It’s purpose does sound like it is the ultimate goal of `systemd timers` but this is the first I have heard of them, but I am a windows guy.

---

<div class="post-metadata">

**Author:** ![jimr1](https://cdn.forum.virtualmin.com/user_avatar/forum.virtualmin.com/jimr1/32/14173_2.png) [@jimr1](https://forum.virtualmin.com/u/jimr1)\
**Post date:** [June 16, 2026, 8:26am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/4 "2026-06-16T08:26:42Z")

</div>

> [@Randomz](#):
>
> it may not be long before the old cron jobs become redundant.

The limitation of cron is it’s inability to run jobs at a frequency of less than a minute (unless you loads of `sleep 10` statements in the cron command line to make it run every 10 seconds). So if systemd timers can run at a frequency of less than a minute, I’m all for it. In my use case I coded my own cron service which allows me to run jobs at any frequency of over a second, but systemd can do it I would use that instead

---

<div class="post-metadata">

**Author:** ![Randomz](https://cdn.forum.virtualmin.com/letter_avatar_proxy/v4/letter/r/839c29/32.png) [@Randomz](https://forum.virtualmin.com/u/Randomz)\
**Post date:** [June 16, 2026, 8:32am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/5 "2026-06-16T08:32:21Z")

</div>

Cron will be around for years, I am not advocating for it to be removed, just asking to keep up with what has been in use now for a couple of years.

---

<div class="post-metadata">

**Author:** ![Randomz](https://cdn.forum.virtualmin.com/letter_avatar_proxy/v4/letter/r/839c29/32.png) [@Randomz](https://forum.virtualmin.com/u/Randomz)\
**Post date:** [June 16, 2026, 8:36am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/6 "2026-06-16T08:36:59Z")

</div>

Another thing is that on my servers that use certbot standalone - with no httpd server, I now have a pre hook that enables port 80 before certbot runs, then a post hook that disables port 80 after certbot runs.

No need for port 80 to be open all the time.

I couldn’t get that to work reliably using cron, but it was probably me that was the problem.

---

<div class="post-metadata">

**Author:** ![Randomz](https://cdn.forum.virtualmin.com/letter_avatar_proxy/v4/letter/r/839c29/32.png) [@Randomz](https://forum.virtualmin.com/u/Randomz)\
**Post date:** [June 16, 2026, 8:42am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/7 "2026-06-16T08:42:07Z")

</div>

I also made a deploy hook that only runs after successful completion that copies the new LE certs to where webmin wants them, then restarts webmin in case I need to run certbot renew in CLI again.

---

<div class="post-metadata">

**Author:** ![Ilia](https://cdn.forum.virtualmin.com/user_avatar/forum.virtualmin.com/ilia/32/10185_2.png) [@Ilia](https://forum.virtualmin.com/u/Ilia)\
**Post date:** [June 16, 2026, 11:23am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/8 "2026-06-16T11:23:06Z")

</div>

> [@Randomz](#):
>
> I think a module for managing this would be quite useful, it may not be long before the old cron jobs become redundant.

I’ve just finished working on a new Systemd Services and Units module that should be included in Webmin 2.650. It will support Systemd Timers and all other unit types supported by systemd.

Details are here:

> <https://github.com/webmin/webmin/pull/2760>
>
> Hello Jamie!
> 
> This PR adds a standalone Systemd Services and Units module for …managing systemd units across system and user scopes.
> 
> The module keeps systemd-specific behavior separate from the legacy Bootup and Shutdown module and is implemented as standalone \`strict\`/\`warnings\` Perl code rather than depending on its existing init helpers. Those helpers intentionally smooth over multiple init systems, while this module keeps systemd-specific file handling, user-manager behavior, ACL checks, and control operations explicit, scoped, and easier to audit.
> 
> It includes:
> 
> \- Tabbed views for services, timers, sockets, paths, targets, storage, resources, devices, and user units
> \- Guided creation and editing for common unit types, with contextual fields, validation, and help
> \- User-scoped unit management with linger support and safe handling of home-directory unit files
> \- Runtime actions for start, stop, restart, enable, disable, status, logs, properties, dependencies, and system-unit mask/unmask
> \- Drop-in override inventory plus create, edit, and delete flows
> \- Manual unit-file editing with daemon reload reminders and actions
> \- Configurable module behavior, visible tabs, display options, and post-create navigation
> \- Comprehensive ACL controls for system/user scopes, actions, manual edits, drop-ins, linger, reload, backup, and user filters
> \- Safe Webmin user support through a scoped safe ACL preset
> \- Virtualmin integration for granting domain owners access to their own systemd user units
> \- Tests for unit generation, safety checks, ACL behavior, user-unit handling, backup coverage, and Perl::Critic compatibility
> 
> A companion \[Virtualmin PR\](https://github.com/virtualmin/virtualmin-gpl/pull/1234) adds template integration so domain owners can be granted scoped access to their own systemd user units when this module is installed.
> 
> Screenshots: 
> \<table\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/eaa189a5-a13d-4ea9-8ed1-9a475ae4bff4"\>\<img src="https://github.com/user-attachments/assets/eaa189a5-a13d-4ea9-8ed1-9a475ae4bff4" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/45c7bc8c-5112-4119-a83e-ac1d26acc774"\>\<img src="https://github.com/user-attachments/assets/45c7bc8c-5112-4119-a83e-ac1d26acc774" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/068fe39a-0bb2-4414-97c9-3c32667dbf38"\>\<img src="https://github.com/user-attachments/assets/068fe39a-0bb2-4414-97c9-3c32667dbf38" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/431d6efe-d9ee-42e1-a6d1-5f6d8c64cffa"\>\<img src="https://github.com/user-attachments/assets/431d6efe-d9ee-42e1-a6d1-5f6d8c64cffa" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/cf43c4e7-2648-466d-a6e4-4ea22592690f"\>\<img src="https://github.com/user-attachments/assets/cf43c4e7-2648-466d-a6e4-4ea22592690f" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/6319becf-291e-4de7-8ebf-01455f606ca9"\>\<img src="https://github.com/user-attachments/assets/6319becf-291e-4de7-8ebf-01455f606ca9" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/367f7593-56bd-432f-a3c3-b6b36c388d15"\>\<img src="https://github.com/user-attachments/assets/367f7593-56bd-432f-a3c3-b6b36c388d15" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/a7be9b9f-6eb4-4917-8ab9-43dfdce727a2"\>\<img src="https://github.com/user-attachments/assets/a7be9b9f-6eb4-4917-8ab9-43dfdce727a2" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/552ecf2c-35a6-4a4f-bf37-ad784125b637"\>\<img src="https://github.com/user-attachments/assets/552ecf2c-35a6-4a4f-bf37-ad784125b637" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/764a0a07-ac05-41c8-b877-5b4e47ad6fbc"\>\<img src="https://github.com/user-attachments/assets/764a0a07-ac05-41c8-b877-5b4e47ad6fbc" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/6345871d-7cf2-4cf4-b832-9c80161264a6"\>\<img src="https://github.com/user-attachments/assets/6345871d-7cf2-4cf4-b832-9c80161264a6" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/4c587817-480d-4629-9997-8474f29a6cc9"\>\<img src="https://github.com/user-attachments/assets/4c587817-480d-4629-9997-8474f29a6cc9" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/0281836f-09a9-42fa-baa8-9f6d79734ec6"\>\<img src="https://github.com/user-attachments/assets/0281836f-09a9-42fa-baa8-9f6d79734ec6" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/e600b190-1846-4545-8614-641b8114b001"\>\<img src="https://github.com/user-attachments/assets/e600b190-1846-4545-8614-641b8114b001" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/28ac9dd3-d7d6-4bc6-a7a3-5f2adbfe5f85"\>\<img src="https://github.com/user-attachments/assets/28ac9dd3-d7d6-4bc6-a7a3-5f2adbfe5f85" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/b86f065a-f681-4f13-bfd4-c59d41cd3459"\>\<img src="https://github.com/user-attachments/assets/b86f065a-f681-4f13-bfd4-c59d41cd3459" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/471d1706-fef1-466d-9d3b-a151b7515629"\>\<img src="https://github.com/user-attachments/assets/471d1706-fef1-466d-9d3b-a151b7515629" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/eb237d27-5767-4fa9-b1df-3c7f92527153"\>\<img src="https://github.com/user-attachments/assets/eb237d27-5767-4fa9-b1df-3c7f92527153" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/5c2c92fe-5a62-4a00-9618-44e9e7822352"\>\<img src="https://github.com/user-attachments/assets/5c2c92fe-5a62-4a00-9618-44e9e7822352" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/4b923d41-e2ee-4e57-8f9d-0624c82fcb1c"\>\<img src="https://github.com/user-attachments/assets/4b923d41-e2ee-4e57-8f9d-0624c82fcb1c" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/1fd6e843-b2e7-46e1-b5b7-895ffd1d97cf"\>\<img src="https://github.com/user-attachments/assets/1fd6e843-b2e7-46e1-b5b7-895ffd1d97cf" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/456d76d1-77d8-48b2-a03f-4a7406d82b84"\>\<img src="https://github.com/user-attachments/assets/456d76d1-77d8-48b2-a03f-4a7406d82b84" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/f4bd52c1-d23d-4d61-8995-b56b3f9645d1"\>\<img src="https://github.com/user-attachments/assets/f4bd52c1-d23d-4d61-8995-b56b3f9645d1" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/5c7f4a7a-b2c8-4cdd-9662-de8765a97a44"\>\<img src="https://github.com/user-attachments/assets/5c7f4a7a-b2c8-4cdd-9662-de8765a97a44" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/99408c93-1177-491b-ac8b-58d0d544a30e"\>\<img src="https://github.com/user-attachments/assets/99408c93-1177-491b-ac8b-58d0d544a30e" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/b8719eb8-a280-4bad-8624-aea0f5dffaa3"\>\<img src="https://github.com/user-attachments/assets/b8719eb8-a280-4bad-8624-aea0f5dffaa3" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/c73deb65-d89b-4868-a314-831b2ec4cbc9"\>\<img src="https://github.com/user-attachments/assets/c73deb65-d89b-4868-a314-831b2ec4cbc9" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/831a048f-34c0-4188-afb6-3a56cdafc4bb"\>\<img src="https://github.com/user-attachments/assets/831a048f-34c0-4188-afb6-3a56cdafc4bb" width="100%" /\>\</a\>\</td\>
> \</tr\>
> \<tr\>
> \<td width="50%"\>\<a target="\_blank" href="https://github.com/user-attachments/assets/f35b3eeb-7116-4cf6-9712-8d45a12291db"\>\<img src="https://github.com/user-attachments/assets/f35b3eeb-7116-4cf6-9712-8d45a12291db" width="100%" /\>\</a\>\</td\>
> \<td width="50%"\>\</td\>
> \</tr\>
> \</table\>

---

<div class="post-metadata">

**Author:** ![stefan1959](https://cdn.forum.virtualmin.com/letter_avatar_proxy/v4/letter/s/49beb7/32.png) [@stefan1959](https://forum.virtualmin.com/u/stefan1959)\
**Post date:** [June 16, 2026, 11:59am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/9 "2026-06-16T11:59:07Z")

</div>

Github 4 days ago, your on the ball 🙂  
Keep up the good work.

---

<div class="post-metadata">

**Author:** ![shoulders](https://cdn.forum.virtualmin.com/user_avatar/forum.virtualmin.com/shoulders/32/10086_2.png) [@shoulders](https://forum.virtualmin.com/u/shoulders)\
**Post date:** [June 16, 2026, 3:51pm UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/10 "2026-06-16T15:51:13Z")

</div>

On the conversation you put a lot of effort into the documentation, will this make it to the regular docs? If it has already, I will hang my head in shame because I am to lazy to search.

---

<div class="post-metadata">

**Author:** ![Joe](https://cdn.forum.virtualmin.com/user_avatar/forum.virtualmin.com/joe/32/9_2.png) [@Joe](https://forum.virtualmin.com/u/Joe)\
**Post date:** [June 16, 2026, 10:01pm UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/11 "2026-06-16T22:01:54Z")

</div>

It’s not even in the regular Webmin yet!

Of course it should have some documentation, but not before the module is even finished being reviewed and merged into Webmin proper.

---

<div class="post-metadata">

**Author:** ![Ilia](https://cdn.forum.virtualmin.com/user_avatar/forum.virtualmin.com/ilia/32/10185_2.png) [@Ilia](https://forum.virtualmin.com/u/Ilia)\
**Post date:** [June 17, 2026, 10:54am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/12 "2026-06-17T10:54:57Z")

</div>

> [@Joe](#):
>
> Of course it should have some documentation, but not before the module is even finished being reviewed and merged into Webmin proper.

I will publish docs for every new module when Webmin 2.650 is released.

---

<div class="post-metadata">

**Author:** ![system](https://cdn.forum.virtualmin.com/uploads/default/original/2X/c/cd96d761e326db4b2bef94886a639109bd7a8e76.svg) [@system](https://forum.virtualmin.com/u/system)\
**Post date:** [August 16, 2026, 10:55am UTC](https://forum.virtualmin.com/t/module-to-manage-scheduled-jobs-under-systemd/137433/13 "2026-08-16T10:55:19Z")

</div>

Closed on August 16, 2026, 10:55am UTC

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
