<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Systemd on /var/log/janio</title><link>https://devops.sarmento.org/en/tags/systemd/</link><description>Recent content in Systemd on /var/log/janio</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 17 Apr 2026 11:20:00 +0000</lastBuildDate><atom:link href="https://devops.sarmento.org/en/tags/systemd/index.xml" rel="self" type="application/rss+xml"/><item><title>Monitoring Files and Folders on Linux with systemd path units (and inotifywait for those without root)</title><link>https://devops.sarmento.org/en/posts/monitoring-files-and-folders-on-linux-with-systemd-path-units-and-inotifywait/</link><pubDate>Fri, 17 Apr 2026 11:05:00 +0000</pubDate><guid>https://devops.sarmento.org/en/posts/monitoring-files-and-folders-on-linux-with-systemd-path-units-and-inotifywait/</guid><description>&lt;p&gt;In the &lt;a href="https://devops.sarmento.org/en/posts/monitoring-files-and-folders-with-launchd-watchpaths-in-practice/"&gt;previous post&lt;/a&gt;, macOS&amp;rsquo;s launchd watched files and directories with &lt;code&gt;WatchPaths&lt;/code&gt; to fire scripts automatically when something changed. The model is reactive — instead of running a backup every hour or a conversion every five minutes, the system watches the path on disk and only runs the job when it detects an actual modification. No polling, no waste, no vulnerability window between the change and the action.&lt;/p&gt;
&lt;p&gt;Linux has the same capability, but implemented differently and with more options. systemd offers path units — &lt;code&gt;.path&lt;/code&gt; files that monitor filesystem paths and automatically activate an associated service when the condition is met. It is the direct equivalent of launchd&amp;rsquo;s &lt;code&gt;WatchPaths&lt;/code&gt;, with the same declarative philosophy: you describe what to watch in a configuration file, the system handles the rest. For anyone working on servers or desktops with systemd, which at this point means practically every mainstream distribution, path units are the right tool.&lt;/p&gt;</description></item><item><title>Munin: internal links for Hugo with AI</title><link>https://devops.sarmento.org/en/posts/munin-internal-links-for-hugo-with-ai/</link><pubDate>Fri, 17 Apr 2026 10:49:00 +0000</pubDate><guid>https://devops.sarmento.org/en/posts/munin-internal-links-for-hugo-with-ai/</guid><description>&lt;p&gt;In the &lt;a href="https://devops.sarmento.org/en/posts/hugin-tags-and-summaries-for-hugo-with-ai/"&gt;post about Hugin&lt;/a&gt; I explained how I solved the tag and summary problem on my Hugo blog. But there was another problem, less obvious and more annoying: internal links. Those links that connect one post to another, help readers navigate related content, and that Google loves to see on a well-structured site.&lt;/p&gt;
&lt;p&gt;The truth is nobody links anything. You write a post about systemd timers, another about cron, another about launchd — and none of the three mentions the others. They&amp;rsquo;re content islands that could be connected. The obvious solution is to reread every post, remember which others exist, and manually insert links. With 30 posts, it&amp;rsquo;s doable. With 400, it&amp;rsquo;s insane.&lt;/p&gt;</description></item><item><title>Exposing homelab services to the internet with Cloudflare Tunnel</title><link>https://devops.sarmento.org/en/posts/exposing-homelab-services-to-the-internet-with-cloudflare-tunnel/</link><pubDate>Fri, 27 Mar 2026 18:24:00 +0000</pubDate><guid>https://devops.sarmento.org/en/posts/exposing-homelab-services-to-the-internet-with-cloudflare-tunnel/</guid><description>&lt;p&gt;In the &lt;a href="https://devops.sarmento.org/en/posts/ssh-behind-nat-ssh-jcom-solves-it/"&gt;previous post&lt;/a&gt;, I showed how SSH-J.com solves a specific problem: accessing a machine behind NAT via SSH, without opening ports on the router and without relying on a public IP. The reverse tunnel works well for interactive sessions and file transfers, and SSH-J.com as a jump host makes everything trivial to configure. For SSH, it remains the simplest solution I know.&lt;/p&gt;
&lt;p&gt;But SSH is just one piece of the puzzle. Anyone who maintains a homelab — even if it&amp;rsquo;s just a mini PC under the desk or a Raspberry Pi in the corner of the room — inevitably ends up running web services: an RSS reader, a monitoring dashboard, a Gitea, a Jellyfin, an &lt;a href="https://devops.sarmento.org/en/posts/immich-your-photos-your-server-your-rules/"&gt;Immich&lt;/a&gt;. These services listen on local HTTP ports and work perfectly as long as you&amp;rsquo;re on the same network. The problem appears when you want to access them from outside — from the office, from your phone on the bus, from anywhere that isn&amp;rsquo;t your local network.&lt;/p&gt;</description></item><item><title>SSH Behind NAT? SSH-J.com Solves It.</title><link>https://devops.sarmento.org/en/posts/ssh-behind-nat-ssh-jcom-solves-it/</link><pubDate>Wed, 25 Mar 2026 22:26:00 +0000</pubDate><guid>https://devops.sarmento.org/en/posts/ssh-behind-nat-ssh-jcom-solves-it/</guid><description>&lt;p&gt;You work remotely, have a server at home, a Raspberry Pi running services, or a machine at the office you need to reach every now and then. The scenario is common and the obvious solution is SSH — already installed, secure, and battle-tested for decades. The problem is that between your machine and the rest of the internet sits a router, a NAT, and possibly an ISP that does not give you a fixed public IP or blocks incoming ports. Suddenly, the most reliable protocol in system administration becomes unreachable from outside your local network.&lt;/p&gt;</description></item><item><title>Scheduling Tasks on macOS with launchd: No cron, No Workarounds</title><link>https://devops.sarmento.org/en/posts/scheduling-tasks-on-macos-with-launchd-no-cron-no-workarounds/</link><pubDate>Mon, 23 Mar 2026 21:29:00 +0000</pubDate><guid>https://devops.sarmento.org/en/posts/scheduling-tasks-on-macos-with-launchd-no-cron-no-workarounds/</guid><description>&lt;p&gt;In the &lt;a href="https://devops.sarmento.org/en/posts/systemd-timers-time-to-retire-cron/"&gt;previous post&lt;/a&gt; I showed how systemd timers replace cron on Debian and Ubuntu servers with concrete advantages: integrated logging, missed execution recovery, declarative dependencies, and resource control. The logic is compelling and the migration is straightforward — as long as you are on a system running systemd. But if your daily routine includes a Mac, it is a different story.&lt;/p&gt;
&lt;p&gt;macOS has its own scheduling system, predating systemd and built on a different philosophy. It is called &lt;a href="https://devops.sarmento.org/posts/monitoring-files-and-folders-with-launchd-watchpaths-in-practice/"&gt;launchd&lt;/a&gt;, it has been around since Mac OS X Tiger in 2005, and it is responsible for practically everything that runs in the background on the system — from internal Apple services to that Spotify updater you never asked to install. Despite being the official and recommended way to schedule tasks on a Mac, launchd lives in a kind of blind spot: people coming from Linux tend to reach for cron out of reflex, and Mac users without a sysadmin background do not even know the option exists.&lt;/p&gt;</description></item><item><title>Systemd Timers: Time to Retire cron</title><link>https://devops.sarmento.org/en/posts/systemd-timers-time-to-retire-cron/</link><pubDate>Mon, 23 Mar 2026 06:21:00 +0000</pubDate><guid>https://devops.sarmento.org/en/posts/systemd-timers-time-to-retire-cron/</guid><description>&lt;p&gt;If you have been managing Debian or Ubuntu servers for any length of time, you probably have a comfort relationship with cron. One line in the crontab, five scheduling fields, and the path to a script — done. cron has worked this way since the 1970s, and that simplicity is exactly what kept it relevant for so long.&lt;/p&gt;
&lt;p&gt;The problem is that &amp;ldquo;it works&amp;rdquo; and &amp;ldquo;it works well in 2026&amp;rdquo; are different things. When a job fails silently at three in the morning, when you need to figure out which of twenty crontabs scattered across the system contains that one specific task, or when the server reboots and simply misses the execution that should have happened during downtime — those are the moments when cron shows it was designed for an era with different expectations around observability and resilience.&lt;/p&gt;</description></item></channel></rss>