Naar de inhoud
ToolMug

systemd-servicebestand-generator

Houd een Node.js-, Python- of Go-programma draaiend op een Linux-server, start het bij het opstarten en herstart het als het crasht — zonder elke systemd-optie te onthouden. Vul het commando en de gebruiker in, kies een herstartbeleid en omgevingsvariabelen, en kopieer het .service-bestand samen met de commando’s om het te installeren en te starten. Vink Volgens schema uitvoeren (een .timer maken) aan voor een .timer als moderne vervanger van cron.

Draait in je browser: niets wat je invoert wordt geüpload

Wordt de bestandsnaam, bijv. myapp → myapp.service

Gebruik het volledige pad naar het programma, bijv. /usr/bin/python3 app.py

Het commando blijft op de voorgrond draaien (de meeste webapps en scripts).

Eén SLEUTEL=waarde per regel; waarden met spaties worden voor je tussen aanhalingstekens gezet.

0 behoudt de standaardwaarde van het systeem.

myapp.service

Installeren en starten

Plak de commando’s als root op de server. Voer na het bewerken van een unitbestand opnieuw systemctl daemon-reload uit. Logs: journalctl -u <name>.

Zo gebruik je het

  1. Voer de servicenaam, het commando met het volledige pad en de werkmap in.
  2. Stel de gebruiker, het herstartbeleid en eventuele omgevingsvariabelen in.
  3. Voeg eventueel basisbeveiliging of een schema (OnCalendar) toe om een timer te maken.
  4. Kopieer de gegenereerde bestanden, of plak de installatiecommando’s in een root-shell op de server.

Opties uitgelegd

Type
simple past bij programma’s die op de voorgrond blijven; oneshot past bij scripts die één keer draaien, zoals geplande taken.
Restart
Bij fout herstart de service wanneer die met een fout stopt of crasht; Altijd herstart hem ook na een normaal einde.
OnCalendar
Wanneer de timer afgaat, bijv. daily of *-*-* 03:00:00 voor elke dag 3 uur 's nachts. Test uitdrukkingen met systemd-analyze calendar.

Voorbeeld: een nachtelijke taak als timer

Om elke nacht om 3 uur een script uit te voeren, stel je het Commando (ExecStart) in op /usr/local/bin/backup.sh, de servicenaam op backup, Type op oneshot en Restart op Nooit, en vink je daarna “Volgens schema uitvoeren (een .timer maken)” en “Basisbeveiliging” aan. Met de standaardgebruiker en werkmap maakt de generator twee bestanden. backup.service:

[Unit]
Description=Nightly backup

[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only

en backup.timer:

[Unit]
Description=Run backup on a schedule

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service

[Install]
WantedBy=timers.target

Er veranderen twee dingen wanneer een timer aan staat. Het servicebestand verliest zijn sectie [Install], omdat de timer het start, en de installatiecommando’s schakelen de timer in in plaats van de service:

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f

Het Type wordt niet voor je gewijzigd wanneer je de timeroptie aanvinkt, dus kies zelf oneshot voor taken die eindigen. Een oneshot-service in combinatie met Restart Altijd is niet geldig, dus de generator laat Restart weg en toont een waarschuwing.

Veelgestelde vragen

Waar zet ik het bestand neer?

In /etc/systemd/system/. Voer daarna systemctl daemon-reload en systemctl enable --now <name>.service uit — de gegenereerde commando’s doen dit allemaal.

Waarom mislukt mijn service met “Executable path is not absolute”?

Oudere systemd-versies hebben het volledige pad naar het programma nodig in ExecStart. Zoek het op met which, bijv. which node.

Timer of cron?

Timers loggen in het journal, kunnen gemiste runs inhalen terwijl de server uit stond en draaien nooit twee keer tegelijk. cron is eenvoudiger voor oneliners en werkt nog prima.

Privacy

Deze tool draait volledig in je browser. Je bestanden en tekst worden op je eigen apparaat verwerkt en nooit naar onze servers geüpload.

Gerelateerde tools