Sitemap
Saket Sisodia

Saket Sisodia

Corporate Trainer | Red Hat Linux, Terraform, AWS, Azure, Advance Excel, Power BI | Empowering Learners Through Education, Certification & Strategic Training

Mastering systemd: Services, Timers, and Logs with journalctl

5 min readJul 6, 2026

--

Linux has evolved far beyond its early days of simple init scripts. Today, systemd stands as the central nervous system of most modern distributions — orchestrating services, managing startup processes, scheduling tasks, and maintaining detailed logs. For administrators, developers, and power users, understanding systemd is not just optional; it’s essential for mastering Linux automation and reliability.

This guide dives deep into three pillars of systemd: services, timers, and logs. By the end, you’ll know how to start, stop, and enable services with systemctl, replace traditional cron jobs with systemd timers, and analyze logs efficiently using journalctl.

Press enter or click to view image in full size

🧩 Understanding systemd: The Modern Init System

Before systemd, Linux relied on SysVinit, a simpler but less flexible system for starting and stopping services. SysVinit executed scripts sequentially, which slowed boot times and made dependency management cumbersome. Systemd revolutionized this by introducing parallel startup, dependency tracking, and unit files — modular configuration files that define how services, sockets, devices, and timers behave.

Each component in systemd is called a unit, and units are categorized by type:

  • .service → Defines a background service or daemon.
  • .timer → Defines scheduled tasks.
  • .socket → Manages network or IPC sockets.
  • .target → Groups units for startup sequences.
  • .mount → Handles filesystem mounts.
  • .path → Monitors file or directory changes.

Systemd’s design philosophy is simple: everything is a unit, and every unit can be controlled using the systemctl command.

⚙️ Managing Services with systemctl

The systemctl command is your Swiss army knife for controlling services. It replaces older commands like service and chkconfig, offering a unified interface for all systemd units.

Starting and Stopping Services

To start a service:

bash

sudo systemctl start nginx

To stop it:

bash

sudo systemctl stop nginx

To restart or reload configuration:

bash

sudo systemctl restart nginx
sudo systemctl reload nginx

Enabling and Disabling Services

To make a service start automatically at boot:

bash

sudo systemctl enable nginx

To disable it:

bash

sudo systemctl disable nginx

You can combine enabling and starting in one go:

bash

sudo systemctl enable --now nginx

Checking Service Status

To verify whether a service is running:

bash

systemctl status nginx

This command shows the active state, recent logs, and process details — a quick diagnostic snapshot.

Listing All Services

bash

systemctl list-units --type=service

You can also filter by state:

bash

systemctl list-units --type=service --state=failed

Masking Services

If you want to prevent a service from being started manually or automatically:

bash

sudo systemctl mask nginx

To unmask:

bash

sudo systemctl unmask nginx

Masking is useful for disabling problematic services that might interfere with system stability.

🕒 Scheduling Tasks with systemd Timers

Traditionally, Linux users relied on cron for scheduling tasks. While cron is simple, it lacks integration with system services and doesn’t provide detailed logging or dependency handling. Systemd timers solve these issues elegantly.

A systemd timer consists of two files:

  1. A service unit that defines what to run.
  2. A timer unit that defines when to run it.

Step 1: Create a Service Unit

Create /etc/systemd/system/backup.service:

ini

[Unit]
Description=Database Backup Service
[Service]
ExecStart=/usr/local/bin/db-backup.sh

This service runs your backup script when triggered.

Step 2: Create a Timer Unit

Create /etc/systemd/system/backup.timer:

ini

[Unit]
Description=Run backup daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target

Step 3: Enable and Start the Timer

bash

sudo systemctl enable --now backup.timer

Step 4: Verify Active Timers

bash

systemctl list-timers

You’ll see output showing when each timer last ran and when it’s scheduled next.

Flexible Scheduling Examples

Systemd timers support rich calendar expressions:

  • Every Monday at 9 AM OnCalendar=Mon *-*-* 09:00:00
  • Every 15 minutes OnCalendar=*:0/15
  • Every day at midnight OnCalendar=*-*-* 00:00:00

Persistent Execution

The Persistent=true option ensures missed runs (e.g., due to system downtime) are executed immediately after boot — something cron cannot do.

Advantages Over Cron

  • Integrated with systemd logging (journalctl).
  • Can trigger services with dependencies.
  • Supports flexible time expressions.
  • Provides detailed status and history.

Timers are ideal for backups, cleanup scripts, or periodic monitoring tasks.

📜 Exploring Logs with journalctl

Systemd introduced journald, a centralized logging system that captures messages from the kernel, services, and applications. The journalctl command lets you query, filter, and analyze these logs efficiently.

Viewing Logs

To view all logs:

Get Saket Sisodia’s stories in your inbox

Join Medium for free to get updates from this writer.

bash

journalctl

Follow Logs in Real Time

bash

journalctl -f

This works like tail -f for continuous monitoring.

Filter by Service

bash

journalctl -u nginx

This shows logs specific to the Nginx service.

Filter by Time

bash

journalctl --since "1 hour ago"
journalctl --since "yesterday" --until "today"

Filter by Priority

bash

journalctl -p err

Priority levels range from:

  • 0 → emerg
  • 1 → alert
  • 2 → crit
  • 3 → err
  • 4 → warning
  • 5 → notice
  • 6 → info
  • 7 → debug

View Boot Logs

bash

journalctl -b

To view logs from a previous boot:

bash

journalctl -b -1

Export Logs

You can export logs for analysis:

bash

journalctl > systemd_logs.txt

Clean Up Old Logs

To manage disk space:

bash

sudo journalctl --vacuum-time=7d

This keeps only the last seven days of logs.

🧠 Practical Use Cases

1. Automating Backups

Combine a backup script with a timer to ensure daily database dumps without manual intervention.

2. Monitoring Service Health

Use systemctl status and journalctl -u to detect failures early and trigger alerts.

3. Scheduled Maintenance

Timers can restart services or clear caches periodically, improving uptime and performance.

4. Debugging Startup Issues

journalctl -b -1 helps you analyze what went wrong during the last boot.

5. Security Auditing

Filter logs for authentication events:

bash

journalctl | grep sshd

This helps track login attempts and potential intrusions.

🧩 Integrating systemd with DevOps Workflows

Systemd isn’t just for servers — it’s a powerful tool for automation and CI/CD environments. You can:

  • Use timers to trigger build scripts.
  • Manage container services (e.g., Podman or Docker) via systemd units.
  • Collect structured logs for monitoring tools like Prometheus or ELK.

For example, a containerized web app can be managed with:

bash

udo systemctl enable --now podman-container@myapp.service

This ensures your container starts automatically and logs are captured in the journal.

🧰 Troubleshooting Tips

  • Service fails to start? Check logs with journalctl -xe for detailed error messages.
  • Timer not triggering? Verify with systemctl list-timers and ensure both .service and .timer files are enabled.
  • Log too large? Use journalctl --vacuum-size=500M to limit log storage.
  • Need persistent logs? Enable them by creating /var/log/journal and restarting systemd-journald.

🌟 Why Mastering systemd Matters

Systemd unifies service management, scheduling, and logging under one framework. Once you understand its logic, you gain:

  • Consistency across all Linux distributions.
  • Reliability through automatic restarts and dependency handling.
  • Visibility with structured logs and real‑time monitoring.
  • Efficiency by replacing multiple tools (cron, syslog, init scripts) with one cohesive system.

--

--

Saket Sisodia
Saket Sisodia