Systemd Service & Timer Generator
Build .service and .timer unit files for systemd interactively. Fill in the form, toggle security and limits, copy or download. 100% client-side.
[Unit]
[Service]
[Install]
Generated Config
[Unit] Description=My Application After=network.target [Service] Type=simple ExecStart=/usr/local/bin/myapp Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
Quick Install
# 1. Save the file(s)
sudo cp my-application.service /etc/systemd/system/
# 2. Reload systemd
sudo systemctl daemon-reload
# 3. Enable and start
sudo systemctl enable --now my-application
# 4. Check status
sudo systemctl status my-application
Quick Recipes
Click a recipe to populate the form with a common service configuration.
Systemd Service File Guide
systemd is the default init system on most modern Linux distributions (Ubuntu, Debian, Fedora, CentOS/RHEL, Arch). Service unit files define how processes are started, stopped, and monitored. They live in /etc/systemd/system/ and use an INI-like format with three main sections. To convert between cron schedules and systemd calendar expressions, see the Cron ↔ Systemd Timer Converter.
Unit File Structure
[Unit] Description=My Application After=network.target [Service] Type=simple ExecStart=/usr/local/bin/myapp Restart=on-failure [Install] WantedBy=multi-user.target
Service Types Explained
| Type | When to use | Example |
|---|---|---|
| simple | Default. Process stays in foreground. | Node.js, Go, Python |
| exec | Like simple, but “started” only after exec() succeeds | Gunicorn, Java |
| forking | Process forks to background. Needs PIDFile. | Apache, traditional daemons |
| oneshot | Runs once and exits. Good for scripts. | Migrations, cleanup scripts |
| notify | Process sends sd_notify() when ready | Nginx, Caddy, PostgreSQL |
| idle | Waits for all other jobs to finish | Low-priority tasks |
Common Commands
| Command | Description |
|---|---|
| systemctl start myapp | Start the service |
| systemctl stop myapp | Stop the service |
| systemctl restart myapp | Restart the service |
| systemctl enable myapp | Start on boot |
| systemctl status myapp | Check status and recent logs |
| journalctl -u myapp -f | Follow live logs |
| systemctl daemon-reload | Reload after editing unit files |
Security Hardening
- NoNewPrivileges — prevents privilege escalation via setuid/setgid binaries
- ProtectSystem — makes /usr, /boot, /efi read-only (full adds /etc, strict makes everything read-only)
- ProtectHome — makes /home, /root, /run/user inaccessible
- PrivateTmp — gives the service its own /tmp namespace
- PrivateDevices — restricts access to physical devices
- ReadWritePaths — whitelist writable directories when using ProtectSystem=strict
Privacy First
All configuration is generated entirely in your browser using JavaScript. Your service paths, usernames, environment variables, and infrastructure details are never sent to any server.