125
submitted 1 year ago* (last edited 1 year ago) by TCB13@lemmy.world to c/selfhosted@lemmy.world

After a few conversations with people on Lemmy and other places it became clear to me that most aren't aware of what it can do and how much more robust it is compared to the usual "jankiness" we're used to.

In this article I highlight less known features and give out a few practice examples on how to leverage Systemd to remove tons of redundant packages and processes.

And yes, Systemd does containers. :)

top 19 comments
sorted by: hot top controversial new old
[-] maor@lemmy.org.il 20 points 1 year ago

Love me some systemd timers. Much more fun than cron.

  • Sane handling of environment variables with EnvironmentFile=
  • Out of the box logging. Especially useful is the ability to journalctl -f to watch long-running processes, which I'm not sure whether possible with cron
  • The ability to trigger the service manually rather than setting the timer to * * * * *, then forgetting it's supposed to run in a minute, get distracted, come back in 15 minutes

My only complaint is it's a bit verbose. I'd rather have it as an option inside the .service file. The .timer requires some boilerplate like [Unit].description (it... uh... triggers a service. that's the description), and WantedBy=timers.target. But these are small prices to pay

[-] TCB13@lemmy.world 13 points 1 year ago

Another thing I particularly like is systemctl list-timers --all and its overview of the timer statuses and when they're going to run next.

[-] Atemu@lemmy.ml 2 points 1 year ago

My only complaint is it's a bit verbose. I'd rather have it as an option inside the .service file. The .timer requires some boilerplate like [Unit].description (it... uh... triggers a service. that's the description), and WantedBy=timers.target.

This can be solved through abstraction and automation.

In NixOS for example, you can declare a service that runs an arbitrary script every day like this:

{
  systemd.services.your-service-here = {
    script = "echo 'Hello, world!'";
    startAt = "daily";
  };
}

This automatically creates a service file with the script in its ExecStart and an accompanying timer which runs daily and is part of the timers.target.

[-] maor@lemmy.org.il 2 points 1 year ago

Yep, I manage my servers and local machine with Ansible so I abstracted it with a role. This is indeed not that bad of a con because it's still plaintext so automation is easy, but it's still a minor issue ;)

[-] dauerstaender@feddit.de 16 points 1 year ago

Admin dont like changes in their workflow and Systemd changes a lot of things, for better or for worse. That being said i do like how Systemd does things and wish for an overall better experience for linux not a worse one.

[-] TCB13@lemmy.world 6 points 1 year ago

Yes, like nftables recently did change a LOT of things.

[-] ErwinLottemann@feddit.de 1 points 1 year ago

nftables? Is this a replacement for ipchains or something? :-|

[-] TCB13@lemmy.world 1 points 1 year ago

Ahaha you wish. nftables replaces iptables and it has already happened in Debian 11.

nftables adds a new tool, called nft, which replaces all other tools from iptables, arptables and ebtables. From an architectural point of view it also replaces those parts of the kernel that deal with run-time evaluation of the packet filtering rule set.

Read the complete explanation of the why is is happening here: https://developers.redhat.com/blog/2016/10/28/what-comes-after-iptables-its-successor-of-course-nftables

[-] dandroid@dandroid.app 16 points 1 year ago

I never used Linux before systemd, so I never understood the drama. I use it a ton. Mostly to run my rootless containers via podman. I have a template service file for this, and I just change a few things, systemctl link, enable, and start. And voila. My container is running as a service that I can start and stop like any other service.

[-] d_k_bo@feddit.de 4 points 1 year ago

Replaces crontab with something auditable that actually makes sense and is easy to use

Is there an easier/quicker way than having to create a service unit and a timer unit by hand?

[-] TCB13@lemmy.world 3 points 1 year ago
[-] Norgur@kbin.social 1 points 1 year ago

But of I have to use separate tools... Can't I just use a generator for a crontab? That's not an advantage

[-] dot20@lemmy.world 1 points 1 year ago

I believe if you create a crontab on a systemd system, it actually synthesizes systemd timers from the crontab entries

this post was submitted on 10 Aug 2023
125 points (95.6% liked)

Selfhosted

40199 readers
632 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 1 year ago
MODERATORS