{"id":4936,"date":"2026-08-10T22:33:57","date_gmt":"2026-08-10T22:33:57","guid":{"rendered":"https:\/\/netguide.io\/linux\/systemd-service-erstellen-linux\/"},"modified":"2026-08-10T23:46:37","modified_gmt":"2026-08-10T23:46:37","slug":"systemd-service-erstellen-linux","status":"publish","type":"post","link":"https:\/\/netguide.io\/linux\/de\/systemd-service-erstellen-linux\/","title":{"rendered":"systemd-Service erstellen unter Linux \u2013 Anleitung"},"content":{"rendered":"<script type=\"text\/plain\" data-tcf=\"waiting-for-consent\" data-id=\"4797\" data-bid=\"2\" data-placement=\"4798\">PGRpdiBpZD0ibmV0Z3VpZGVhLTI5NjM2Mzg1MTMiIGNsYXNzPSJuZXRndWlkZWEtYmVmb3JlLWNvbnRlbnQgbmV0Z3VpZGVhLWVudGl0eS1wbGFjZW1lbnQiPjxkaXYgY2xhc3M9Im5ldGd1aWRlYS1hZGxhYmVsIj5BZHZlcnRpc2VtZW50czwvZGl2PjxzY3JpcHQgYXN5bmMgc3JjPSIvL3BhZ2VhZDIuZ29vZ2xlc3luZGljYXRpb24uY29tL3BhZ2VhZC9qcy9hZHNieWdvb2dsZS5qcz9jbGllbnQ9Y2EtcHViLTYyNTg1NTYyNTcyNDU5OTgiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PjxpbnMgY2xhc3M9ImFkc2J5Z29vZ2xlIiBzdHlsZT0iZGlzcGxheTpibG9jazsiIGRhdGEtYWQtY2xpZW50PSJjYS1wdWItNjI1ODU1NjI1NzI0NTk5OCIgCmRhdGEtYWQtc2xvdD0iMzQ5NDExNTM0MiIgCmRhdGEtYWQtZm9ybWF0PSJhdXRvIj48L2lucz4KPHNjcmlwdD4gCihhZHNieWdvb2dsZSA9IHdpbmRvdy5hZHNieWdvb2dsZSB8fCBbXSkucHVzaCh7fSk7IAo8L3NjcmlwdD4KPC9kaXY+<\/script>\n<p class=\"wp-block-paragraph\">Du willst ein eigenes Skript oder Programm als dauerhaften Hintergrunddienst laufen lassen \u2013 zuverl\u00e4ssig, mit Autostart und automatischem Neustart nach Absturz? Daf\u00fcr ist systemd gemacht. In dieser Anleitung erstellst du Schritt f\u00fcr Schritt einen eigenen <strong>systemd-Service unter Linux<\/strong>, aktivierst den Autostart und wertest die Logs aus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ein selbst geschriebenes Programm oder Skript soll dauerhaft im Hintergrund laufen und nach einem Neustart automatisch wieder starten? Dann f\u00fchrt kein Weg an einem <strong>systemd-Service<\/strong> vorbei. systemd ist das zentrale Init-System moderner Linux-Distributionen und verwaltet Dienste zuverl\u00e4ssig: Es startet sie beim Booten, \u00fcberwacht sie und startet sie bei einem Absturz neu. In dieser Anleitung erstellst du eine eigene Service-Unit, aktivierst sie und lernst, wie du Fehler \u00fcber das Journal analysierst.<\/p>\n\n\n\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-1ffd1ad5      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tInhaltsverzeichnis\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#was-ist-ein-systemd-service\" class=\"uagb-toc-link__trigger\">Was ist ein systemd-Service?<\/a><li class=\"uagb-toc__list\"><a href=\"#schritt-1-die-unit-datei-anlegen\" class=\"uagb-toc-link__trigger\">Schritt 1: Die Unit-Datei anlegen<\/a><li class=\"uagb-toc__list\"><a href=\"#die-wichtigsten-optionen-erkl\u00e4rt\" class=\"uagb-toc-link__trigger\">Die wichtigsten Optionen erkl\u00e4rt<\/a><li class=\"uagb-toc__list\"><a href=\"#schritt-2-dienst-aktivieren-und-starten\" class=\"uagb-toc-link__trigger\">Schritt 2: Dienst aktivieren und starten<\/a><li class=\"uagb-toc__list\"><a href=\"#schritt-3-status-und-logs-pr\u00fcfen\" class=\"uagb-toc-link__trigger\">Schritt 3: Status und Logs pr\u00fcfen<\/a><li class=\"uagb-toc__list\"><a href=\"#systemd-timer-statt-cron\" class=\"uagb-toc-link__trigger\">systemd-Timer statt Cron?<\/a><li class=\"uagb-toc__list\"><a href=\"#der-aufbau-einer-unit-datei\" class=\"uagb-toc-link__trigger\">Der Aufbau einer Unit-Datei<\/a><li class=\"uagb-toc__list\"><a href=\"#dienste-sicher-betreiben\" class=\"uagb-toc-link__trigger\">Dienste sicher betreiben<\/a><li class=\"uagb-toc__list\"><a href=\"#fehler-\u00fcber-das-journal-finden\" class=\"uagb-toc-link__trigger\">Fehler \u00fcber das Journal finden<\/a><li class=\"uagb-toc__list\"><a href=\"#h\u00e4ufige-fragen\" class=\"uagb-toc-link__trigger\">H\u00e4ufige Fragen<\/a><li class=\"uagb-toc__list\"><a href=\"#wohin-geh\u00f6rt-meine-eigene-unit-datei\" class=\"uagb-toc-link__trigger\">Wohin geh\u00f6rt meine eigene Unit-Datei?<\/a><li class=\"uagb-toc__list\"><a href=\"#warum-startet-mein-dienst-nach-dem-reboot-nicht\" class=\"uagb-toc-link__trigger\">Warum startet mein Dienst nach dem Reboot nicht?<\/a><li class=\"uagb-toc__list\"><a href=\"#was-bedeutet-daemon-reload\" class=\"uagb-toc-link__trigger\">Was bedeutet daemon-reload?<\/a><li class=\"uagb-toc__list\"><a href=\"#fazit\" class=\"uagb-toc-link__trigger\">Fazit<\/a><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Was ist ein systemd-Service?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">systemd ist das Init- und Dienstverwaltungssystem der meisten modernen Linux-Distributionen. Ein <strong>Service<\/strong> (auch \u201eUnit&#8221;) beschreibt einen Dienst, den systemd startet, \u00fcberwacht und bei Bedarf neu startet. Der gro\u00dfe Vorteil gegen\u00fcber einem einfachen Skript: Autostart beim Booten, definiertes Neustart-Verhalten und zentrales Logging.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 1: Die Unit-Datei anlegen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Eigene Services legst du unter <code>\/etc\/systemd\/system\/<\/code> ab. Erstelle eine Datei mit der Endung <code>.service<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sudo nano \/etc\/systemd\/system\/meindienst.service<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">sudo<\/span><span style=\"color: #9ECBFF\"> nano<\/span><span style=\"color: #9ECBFF\"> \/etc\/systemd\/system\/meindienst.service<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fclle sie mit den drei typischen Abschnitten <code>[Unit]<\/code>, <code>[Service]<\/code> und <code>[Install]<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>[Unit]\nDescription=Mein eigener Dienst\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=\/usr\/bin\/python3 \/opt\/meinapp\/app.py\nWorkingDirectory=\/opt\/meinapp\nUser=meinuser\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">[Unit]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">Description<\/span><span style=\"color: #E1E4E8\">=Mein eigener Dienst<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">After<\/span><span style=\"color: #E1E4E8\">=network.target<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">[Service]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">Type<\/span><span style=\"color: #E1E4E8\">=simple<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">ExecStart<\/span><span style=\"color: #E1E4E8\">=\/usr\/bin\/python3 \/opt\/meinapp\/app.py<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">WorkingDirectory<\/span><span style=\"color: #E1E4E8\">=\/opt\/meinapp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">User<\/span><span style=\"color: #E1E4E8\">=meinuser<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">Restart<\/span><span style=\"color: #E1E4E8\">=on-failure<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">RestartSec<\/span><span style=\"color: #E1E4E8\">=5<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">[Install]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">WantedBy<\/span><span style=\"color: #E1E4E8\">=multi-user.target<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Die wichtigsten Optionen erkl\u00e4rt<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Option<\/th><th>Bedeutung<\/th><\/tr><\/thead><tbody><tr><td><code>Description<\/code><\/td><td>Klartext-Beschreibung des Dienstes<\/td><\/tr><tr><td><code>After=network.target<\/code><\/td><td>Erst starten, wenn das Netzwerk bereit ist<\/td><\/tr><tr><td><code>ExecStart<\/code><\/td><td>Der auszuf\u00fchrende Befehl (immer mit absolutem Pfad!)<\/td><\/tr><tr><td><code>User<\/code><\/td><td>Benutzer, unter dem der Dienst l\u00e4uft<\/td><\/tr><tr><td><code>Restart=on-failure<\/code><\/td><td>Neustart bei Absturz (Alternativen: <code>always<\/code>, <code>no<\/code>)<\/td><\/tr><tr><td><code>RestartSec<\/code><\/td><td>Wartezeit in Sekunden vor dem Neustart<\/td><\/tr><tr><td><code>WantedBy=multi-user.target<\/code><\/td><td>Ziel, an das der Autostart gekoppelt wird<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Achte wie bei <a href=\"https:\/\/netguide.io\/linux\/de\/cronjobs-linux-crontab-einrichten\/\">Cronjobs<\/a> unbedingt auf <strong>absolute Pfade<\/strong> \u2013 systemd l\u00e4uft mit einer minimalen Umgebung.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 2: Dienst aktivieren und starten<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nach dem Anlegen oder \u00c4ndern einer Unit-Datei musst du systemd die Konfiguration neu einlesen lassen. Anschlie\u00dfend aktivierst und startest du den Dienst in einem Rutsch:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sudo systemctl daemon-reload\nsudo systemctl enable --now meindienst<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">sudo<\/span><span style=\"color: #9ECBFF\"> systemctl<\/span><span style=\"color: #9ECBFF\"> daemon-reload<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">sudo<\/span><span style=\"color: #9ECBFF\"> systemctl<\/span><span style=\"color: #9ECBFF\"> enable<\/span><span style=\"color: #79B8FF\"> --now<\/span><span style=\"color: #9ECBFF\"> meindienst<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Der Parameter <code>enable<\/code> sorgt f\u00fcr den Autostart beim Booten, <code>--now<\/code> startet den Dienst sofort mit.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Schritt 3: Status und Logs pr\u00fcfen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ob der Dienst l\u00e4uft, zeigt dir der Status-Befehl:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sudo systemctl status meindienst<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">sudo<\/span><span style=\"color: #9ECBFF\"> systemctl<\/span><span style=\"color: #9ECBFF\"> status<\/span><span style=\"color: #9ECBFF\"> meindienst<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">systemd sammelt die Ausgabe deines Dienstes automatisch im Journal. Die Logs rufst du mit <code>journalctl<\/code> ab \u2013 mit <code>-f<\/code> folgst du ihnen live:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>journalctl -u meindienst -f<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">journalctl<\/span><span style=\"color: #79B8FF\"> -u<\/span><span style=\"color: #9ECBFF\"> meindienst<\/span><span style=\"color: #79B8FF\"> -f<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">systemd-Timer statt Cron?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr wiederkehrende Aufgaben bietet systemd mit <strong>Timern<\/strong> eine Alternative zu <a href=\"https:\/\/netguide.io\/linux\/de\/cronjobs-linux-crontab-einrichten\/\">Cronjobs<\/a>. Timer sind m\u00e4chtiger (z. B. \u201e5 Minuten nach dem Boot&#8221;), aber aufw\u00e4ndiger einzurichten. F\u00fcr einfache Zeitpl\u00e4ne bleibt Cron die schnellere L\u00f6sung; f\u00fcr komplexe Abh\u00e4ngigkeiten oder wenn du ohnehin einen Service hast, sind Timer die sauberere Wahl.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Der Aufbau einer Unit-Datei<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Eine Service-Unit gliedert sich in drei Abschnitte, die jeweils eine klare Aufgabe haben. Wenn du ihren Zweck verstehst, konfigurierst du jeden Dienst gezielt statt per Copy-and-paste.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Abschnitt<\/th><th>Zweck<\/th><\/tr><\/thead><tbody><tr><td><code>[Unit]<\/code><\/td><td>Beschreibung und Abh\u00e4ngigkeiten (z. B. \u201enach dem Netzwerk starten\u201c)<\/td><\/tr><tr><td><code>[Service]<\/code><\/td><td>Was und wie gestartet wird (Befehl, Benutzer, Neustart-Verhalten)<\/td><\/tr><tr><td><code>[Install]<\/code><\/td><td>Wann der Dienst aktiviert wird (Ziel beim Booten)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Dienste sicher betreiben<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Dienst, der als <code>root<\/code> l\u00e4uft, ist ein unn\u00f6tiges Risiko. Lege f\u00fcr deine Anwendung einen eigenen, rechtebeschr\u00e4nkten Benutzer an und trage ihn mit <code>User=<\/code> in die Unit ein. systemd bringt dar\u00fcber hinaus H\u00e4rtungsoptionen mit, die den Zugriff des Dienstes aufs System einschr\u00e4nken.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>User=<\/code> und <code>Group=<\/code> \u2013 Dienst l\u00e4uft mit minimalen Rechten.<\/li>\n\n<li><code>Restart=on-failure<\/code> \u2013 automatischer Neustart nach Abst\u00fcrzen.<\/li>\n\n<li><code>ProtectSystem=strict<\/code> \u2013 sch\u00fctzt Systemverzeichnisse vor Schreibzugriff.<\/li>\n\n<li><code>NoNewPrivileges=true<\/code> \u2013 verhindert Rechteausweitung.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Fehler \u00fcber das Journal finden<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Startet dein Dienst nicht wie erwartet, liefert das systemd-Journal die Antwort. Mit <code>journalctl -u mein-dienst -e<\/code> siehst du die neuesten Log-Eintr\u00e4ge, mit dem Zusatz <code>-f<\/code> verfolgst du sie live. Nach jeder \u00c4nderung an der Unit-Datei musst du <code>sudo systemctl daemon-reload<\/code> ausf\u00fchren, sonst arbeitet systemd noch mit der alten Version.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Status-Befehl <code>systemctl status mein-dienst<\/code> zeigt dir auf einen Blick, ob der Dienst l\u00e4uft, wann er zuletzt gestartet wurde und mit welchem Exit-Code er gegebenenfalls beendet wurde \u2013 der beste Startpunkt f\u00fcr die Fehlersuche. Erg\u00e4nzend liefert <code>systemctl list-units --type=service --state=failed<\/code> eine Liste aller fehlgeschlagenen Dienste, falls du nicht sicher bist, wo das Problem liegt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr Skripte, die in festen Intervallen laufen sollen, kombinierst du deine Service-Unit mit einem <strong>systemd-Timer<\/strong> statt mit einem klassischen Cronjob. Der Vorteil: Timer nutzen dasselbe Logging \u00fcber das Journal, unterst\u00fctzen verpasste Ausf\u00fchrungen per <code>Persistent=true<\/code> und lassen sich sauber mit <code>systemctl<\/code> verwalten. So h\u00e4ltst du zeitgesteuerte und dauerhaft laufende Aufgaben in einem einheitlichen System, statt zwei getrennte Mechanismen pflegen zu m\u00fcssen.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">H\u00e4ufige Fragen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e4ufige Fragen zum Erstellen eigener systemd-Services.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wohin geh\u00f6rt meine eigene Unit-Datei?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Selbst erstellte Units legst du unter <code>\/etc\/systemd\/system\/<\/code> ab. Dieser Pfad ist f\u00fcr Anpassungen durch den Administrator vorgesehen und wird bei Updates nicht \u00fcberschrieben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Warum startet mein Dienst nach dem Reboot nicht?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vermutlich hast du ihn nur gestartet, aber nicht aktiviert. Mit <code>sudo systemctl enable mein-dienst<\/code> sorgst du daf\u00fcr, dass er beim Booten automatisch startet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Was bedeutet daemon-reload?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mit <code>daemon-reload<\/code> liest systemd ge\u00e4nderte Unit-Dateien neu ein. Ohne diesen Schritt bleiben \u00c4nderungen an der Datei wirkungslos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mit einer kurzen Unit-Datei machst du aus jedem Skript einen robusten Dienst: Autostart, automatischer Neustart und zentrales Logging inklusive. Die wichtigsten Befehle sind <code>daemon-reload<\/code>, <code>enable --now<\/code> und <code>journalctl -u<\/code>. Damit hast du deine Hintergrunddienste sauber im Griff. Wie du solche Skripte selbst schreibst, zeigt <a href=\"https:\/\/netguide.io\/linux\/de\/bash-skript-erstellen-linux\/\">Bash-Skript erstellen<\/a>.<\/p>\n<script type=\"text\/plain\" data-tcf=\"waiting-for-consent\" data-id=\"4799\" data-bid=\"2\" data-placement=\"4800\">PGRpdiBpZD0ibmV0Z3VpZGVhLTMwNDYxMDEyMTEiIGNsYXNzPSJuZXRndWlkZWEtYWZ0ZXItY29udGVudCBuZXRndWlkZWEtZW50aXR5LXBsYWNlbWVudCI+PGRpdiBjbGFzcz0ibmV0Z3VpZGVhLWFkbGFiZWwiPkFkdmVydGlzZW1lbnRzPC9kaXY+PHNjcmlwdCBhc3luYyBzcmM9Ii8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb20vcGFnZWFkL2pzL2Fkc2J5Z29vZ2xlLmpzP2NsaWVudD1jYS1wdWItNjI1ODU1NjI1NzI0NTk5OCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+PGlucyBjbGFzcz0iYWRzYnlnb29nbGUiIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyIgZGF0YS1hZC1jbGllbnQ9ImNhLXB1Yi02MjU4NTU2MjU3MjQ1OTk4IiAKZGF0YS1hZC1zbG90PSI0NTU5Nzg1MDAyIiAKZGF0YS1hZC1mb3JtYXQ9ImF1dG8iPjwvaW5zPgo8c2NyaXB0PiAKKGFkc2J5Z29vZ2xlID0gd2luZG93LmFkc2J5Z29vZ2xlIHx8IFtdKS5wdXNoKHt9KTsgCjwvc2NyaXB0Pgo8L2Rpdj4=<\/script>","protected":false},"excerpt":{"rendered":"<p>Eigenen systemd-Service unter Linux erstellen: Unit-Datei anlegen, Dienst automatisch starten, nach Absturz neu starten und Logs per journalctl auswerten.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[9],"tags":[],"class_list":["post-4936","post","type-post","status-publish","format-standard","hentry","category-linux"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Tobias Pries","author_link":"https:\/\/netguide.io\/linux\/author\/tobias-pries\/"},"uagb_comment_info":0,"uagb_excerpt":"Eigenen systemd-Service unter Linux erstellen: Unit-Datei anlegen, Dienst automatisch starten, nach Absturz neu starten und Logs per journalctl auswerten.","brizy_media":[],"_links":{"self":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts\/4936","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/comments?post=4936"}],"version-history":[{"count":2,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts\/4936\/revisions"}],"predecessor-version":[{"id":4997,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/posts\/4936\/revisions\/4997"}],"wp:attachment":[{"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/media?parent=4936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/categories?post=4936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/netguide.io\/linux\/wp-json\/wp\/v2\/tags?post=4936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}