Ich verwende Ubuntu 16.04 auf einem alten HP Laptop
Ich habe eine Software darauf installiert, um einen kleinen hausgemachten Plex-Server zu erstellen. Ich habe Sonarr, Radarr, Deluge, Jackett usw. usw. installiert und alle werden beim Start automatisch gestartet!
Vor ein paar Tagen habe ich beschlossen, auch rclone zu installieren, und ich habe (dank eines GitHub-Projekts) einige Ordner erstellt, die bei jedem Start durch Starten eines Skripts bereitgestellt werden müssen (ich starte es über das Schreiben von Terminals sudo ~/bin/check.mount
). Sonarr und Radarr sind so eingerichtet, dass sie Inhalte per Flut in einen temporären Ordner herunterladen und dann in einen dieser beiden bereitgestellten Ordner exportieren.
Das Problem ist, dass Sonarr / Radarr zum Zeitpunkt des manuellen Starts des Skripts bereits aktiv sind und ihre Stammordner nicht finden können. Daher wird mir ein Fehler angezeigt.
Ich möchte einen mountgdrive.service (Service oder was auch immer erforderlich ist) erstellen, um das check.mount-Skript automatisch zu starten, und, falls dies nicht ausreicht, eine Verzögerung in sonarr.service und radarr.service einfügen! Ist das möglich?
Ich habe das mit geschrieben sudo nano /etc/systemd/system/mountgdrive.service
[Unit]
Description=MountSmokeScreen
After=network.target
[Service]
Type=oneshot
ExecStart=/home/samsepioldoloresh4ze/bin/check.mount
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
und so zu sonarr.service und radarr.service mountgdrive.service
in dem After=
Bit hinzugefügt
[Unit]
Description=Sonarr
After=syslog.target network.target mountgdrive.service
[Service]
User=samsepioldoresh4ze
etcetc
....
Aber es funktioniert nicht! Sonarr und Radarr starten normal, aber die Laufwerke sind nicht montiert! Was mache ich falsch?
Außerdem funktioniert rtcwake auf meinem Laptop nicht - ich denke, es ist ein Kernelproblem?! Gibt es eine Möglichkeit, das zu beheben?
sonarr.service
undradarr.service
danach laufen,mountgdrive.service
ist es in Betrieb?mountgdrive.service
läuft anscheinend , tut aber nichts (es mounten die Laufwerke nicht)sonarr.service
undradarr.service
läuft dann normal, weil Ubuntu ausgeführt wirdmountgdrive.service
.mount
Einheiten anzusehen . Wenn Siemountgdrive.service
lediglich ein Verzeichnis oder ähnliches bereitstellen, können Sie es möglicherweise in einen.mount
Dienst ändern . Da es es besonders zuverlässig macht, da Sie Abhängigkeiten davon haben.Antworten:
Der Grund, warum Sie dieses Problem haben, ist, dass Sie verwenden,
After=
während Sie auchRequires=
oder benötigenWants=
.Es gibt 3 Haupteigenschaften zum Verwalten von Abhängigkeiten. Ich werde versuchen, den Unterschied kurz zu erklären, aber Sie finden weitere Details unter [Einheit] Abschnitt Optionen | freedesktop.org
After=
Diese Option legt nur die Reihenfolge der Einheiten fest und garantiert nicht, dass der Dienst gestartet wurde.
Wants=
Mit dieser Option kann Ihr Gerät erst gestartet werden, nachdem ein anderes Gerät gestartet wurde. (Egal ob es erfolgreich gestartet wurde oder nicht)
Requires=
Genau wie dies
Wants=
jedoch dazu führt, dass Ihr Gerät erst startet, nachdem die Abhängigkeiten erfolgreich gestartet wurden.Sie können auch die Umkehrung jeder dieser Optionen verwenden.
After=
wird umgekehrt vonBefore=
Wants=
wird umgekehrt vonWantedBy=
Requires=
wird umgekehrt vonRequiredBy=
Um Ihr Problem zu beheben, müssen Sie Ihren Mount-Service ändern in:
Oder Sie können
Wants=mountgdrive.service
diesonarr.service
undradarr.service
Einheiten hinzufügen .Sie können dies tun, ohne die Standarddateien zu ändern, indem Sie Folgendes ausführen (Sie müssen dasselbe für Folgendes tun
radarr.service
):Und fügen Sie Folgendes ein:
Hinweis: Sie können ersetzen
Wants=
mitRequires
oderWantedBy=
mit ,RequiredBy=
wenn Sie die beiden Dienste nicht wollen , überhaupt zu starten , wennmountgdrive.service
nicht (ObwohlWants=
in der Regel genug ist und auch in der Dokumentation empfohlen).BEARBEITEN: Die Optionen
WantedBy
undRequiredBy
können nur unter dem[Install]
Abschnitt verwendet werden. (Danke @Yankee )quelle
Wants=
undWantedBy=
, ich werde sie definitiv benutzen !! Ich erhalte diese Fehlermeldung jedoch, wenn ich den Laptop i.imgur.com/a3LE3G9.pngCan't open /.config/SmokeScreen/smokescreen.conf
. Vielleicht haben Sie "~ / .config / ..." in Ihrem Skript. Sie sollten die Tilde (~
) durch den vollständigen Pfad ersetzen, dh/home/you_user_name/.config/....
(oder relative Pfade zu Ihrem Skript verwenden)$HOME
ist beim Booten nicht verfügbar, da noch kein Benutzer angemeldet ist.WantedBy=
in der[Unit]
Sektion sein? Ich dachte, es kann nur rein gehen[Install]
.