{"id":1913,"date":"2022-11-11T21:47:35","date_gmt":"2022-11-11T21:47:35","guid":{"rendered":"https:\/\/www.dev-metal.ch\/?p=1913"},"modified":"2022-11-11T21:57:26","modified_gmt":"2022-11-11T21:57:26","slug":"systemd-service-startreihenfolge-und-warten-auf-godo","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=1913","title":{"rendered":"Systemd Service &#8211; Startreihenfolge und warten auf Godot"},"content":{"rendered":"<p>F\u00fcr meine\u00a0 <a href=\"https:\/\/www.dev-metal.ch\/?p=1659\" target=\"_blank\" rel=\"noopener\">NAS L\u00f6sung<\/a> habe ich ein Raid1, basierend auf btrfs eingesetzt. Services wie Video-Recording und die Bibliotheks-Software speichern dabei ihre Daten auf Mount-Verzeichnisse aus btrfs ab. Leider kam es vor, dass das Mounten der btrfs Verzeichnisse l\u00e4nger dauerte, als das starten der systemd Services. Das f\u00fchrte zur unsch\u00f6nen Situation, dass das System nach einem Reboot im Status &#8222;degraded&#8220; h\u00e4ngen blieb, weil ben\u00f6tigte Verzeichnisse noch nicht gemountet waren. Folgende Services waren bei mir betroffen:<\/p>\n<ul>\n<li>\/lib\/systemd\/system\/mariadb.service (f\u00fcr shinobi)<\/li>\n<li>\/etc\/systemd\/system\/calibre-server.service (f\u00fcr calibre)<\/li>\n<li>\/etc\/systemd\/system\/cps.service (f\u00fcr calibre)<\/li>\n<li>\/etc\/systemd\/system\/pm2-root.service (f\u00fcr shinobi)<\/li>\n<\/ul>\n<p>Ich habe das gel\u00f6st, indem ich einen eigenes systemd Target definiert habe und besagte Services auf dieses Target, welches nach &#8222;multi-user.target&#8220; ausgef\u00fchrt wird, gesetzt habe.<\/p>\n<p>Und so geht das:<\/p>\n<h3>Erstelle ein eigenes Target<\/h3>\n<pre>vi \/etc\/systemd\/system\/custom.target<\/pre>\n<pre>[Unit]\r\nDescription=My Custom Target - um sicherzustellen, dass caliberdb cps und mariadb ganz am schluss starten\r\nRequires=multi-user.target\r\nAfter=multi-user.target\r\nAllowIsolate=yes<\/pre>\n<h3>Betroffene Systemd Services auf custom.target legen<\/h3>\n<p>Die betroffenen Services werden nun nach custom.target gelegt. Gleichzeitig habe ich eine &#8222;sleep&#8220; Phase eingebaut um dem btrfs mount sicher gen\u00fcgend zeit zu geben. Damit triggere ich den Start der Services sch\u00f6n nacheinander.<\/p>\n<h4>mariadb.service<\/h4>\n<pre>vi \/lib\/systemd\/system\/mariadb.service<\/pre>\n<pre>[Unit]\r\n...\r\nAfter=multi-user.target\r\n...\r\n\r\n[Install]\r\n...\r\nWantedBy=custom.target\r\n...\r\n\r\n[Service]\r\n...\r\n# Warte 120s\r\nTimeoutStartSec=300\r\nExecStartPre=\/bin\/sleep 120\r\n...<\/pre>\n<p>Services neu installieren<\/p>\n<pre>sudo systemctl disable mariadb.service \r\nsudo systemctl enable mariadb.service<\/pre>\n<h4>calibre-server.service<\/h4>\n<p>vi \/etc\/systemd\/system\/calibre-server.service<\/p>\n<pre>## startup service\r\n[Unit]\r\nDescription=calibre content server\r\nAfter=multi-user.target\r\n\r\n[Service]\r\n...\r\nTimeoutStartSec=300\r\nExecStartPre=\/bin\/sleep 140\r\n...\r\n\r\n[Install]\r\nWantedBy=custom.target<\/pre>\n<p>Services neu installieren<\/p>\n<pre>sudo systemctl disable mariadb.service \r\nsudo systemctl enable mariadb.service<\/pre>\n<h4>cps.service<\/h4>\n<pre>vi \/etc\/systemd\/system\/cps.service<\/pre>\n<pre>[Unit]\r\nDescription=Calibre-Web\r\nAfter=multi-user.target\r\n\r\n[Service]\r\n...\r\nTimeoutStartSec=300 \r\nExecStartPre=\/bin\/sleep 160\r\n...\r\n\r\n[Install]\r\nWantedBy=custom.target<\/pre>\n<p>Services neu installieren<\/p>\n<pre>sudo systemctl disable mariadb.service \r\nsudo systemctl enable mariadb.service<\/pre>\n<h4>pm2-root.service<\/h4>\n<pre>vi \/etc\/systemd\/system\/pm2-root.service<\/pre>\n<pre>[Unit]\r\n...\r\nAfter=multi-user.target\r\n...\r\n\r\n[Install]\r\nWantedBy=custom.target\r\n\r\n[Service]\r\n..\r\nTimeoutStartSec=300 \r\nExecStartPre=\/bin\/sleep 180\r\n...<\/pre>\n<p>Services neu installieren<\/p>\n<pre>sudo systemctl disable mariadb.service \r\nsudo systemctl enable mariadb.service<\/pre>\n<h3>Links<\/h3>\n<ul>\n<li><a href=\"https:\/\/superuser.com\/questions\/544399\/how-do-you-make-a-systemd-service-as-the-last-service-on-boot\" target=\"_blank\" rel=\"noopener\">https:\/\/superuser.com\/questions\/544399\/how-do-you-make-a-systemd-service-as-the-last-service-on-boot<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr meine\u00a0 NAS L\u00f6sung habe ich ein Raid1, basierend auf btrfs eingesetzt. Services wie Video-Recording und die Bibliotheks-Software speichern dabei ihre Daten auf Mount-Verzeichnisse aus btrfs ab. Leider kam es vor, dass das Mounten der btrfs Verzeichnisse l\u00e4nger dauerte, als das starten der systemd Services. Das f\u00fchrte zur unsch\u00f6nen Situation, dass das System nach einem [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-1913","post","type-post","status-publish","format-standard","hentry","category-techdocs"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1913"}],"version-history":[{"count":5,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1913\/revisions"}],"predecessor-version":[{"id":1920,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1913\/revisions\/1920"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1913"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1913"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}