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.
What gave you that idea, has a OS said they dropping it.
Cpanel still use it and have heard no news they dropping it.
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.
jimr1
June 16, 2026, 8:26am
4
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
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.
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.
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.
Ilia
June 16, 2026, 11:23am
8
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:
master ← systemd
opened 07:48PM - 12 Jun 26 UTC
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>
2 Likes
Github 4 days ago, your on the ball
Keep up the good work.
1 Like
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.
Joe
June 16, 2026, 10:01pm
11
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.
1 Like
Ilia
June 17, 2026, 10:54am
12
I will publish docs for every new module when Webmin 2.650 is released.
1 Like