Warten Sie, bis der Übertragungsdämon gestartet ist, bis das USB-Laufwerk bereitgestellt wurde.

7

Ich führe Transmission-Daemon als systemd-Dienst auf OSMC aus. Beim Öffnen der Fernbedienungs-Weboberfläche nach einem Neustart werden fast immer alle Übertragungen mit der Meldung "Fehler: Keine Daten gefunden! Stellen Sie sicher, dass Ihre Laufwerke verbunden sind [...]" angehalten.

Ich gehe davon aus, dass dies daran liegt, dass die Übertragung beginnt, bevor der Download-Pfad vorhanden ist - in diesem Fall auf einem USB-Laufwerk, das vom System automatisch /media/Elements/[...]ohne manuelle Konfiguration von mir bereitgestellt wird. Ich habe nicht bearbeitet fstab.

Nachdem ich diese Antwort erfolglos ausprobiert habe, frage ich mich, ob es einen anderen Weg gibt, dies zu lösen? Was ich gemäß dieser Antwort getan habe, war, Folgendes in ein hinzuzufügen override.conf:

cat /etc/systemd/system/transmission.service.d/override.conf

[Unit]
After=media-Elements.mount
After=media-Vault\x2013.mount
After=media-Black\x20Mesa.mount

Die Servicedatei:

$ cat /lib/systemd/system/transmission.service

[Unit]
Description=Transmission BitTorrent Daemon
After=udisks-glue.service

[Service]
User=osmc
Group=osmc
Type=notify
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/transmission-daemon -f --log-error --allowed *.*.*.*

[Install]
WantedBy=multi-user.target

Systemd Status:

$ systemctl status transmission

● transmission.service - Transmission BitTorrent Daemon
   Loaded: loaded (/lib/systemd/system/transmission.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/transmission.service.d
           └─override.conf
[...]

Erwähnenswert ist, dass ich Warning: transmission.service changed on disk. Run 'systemctl daemon-reload' to reload units.bei der Überprüfung des Status transmissionnach jedem Neustart bekomme . daemon-reloadbringt es bis zum nächsten Neustart zum Schweigen.

Diese Frage ist verwandt, hat aber mit fstab-Mounts zu tun. Ich würde es vorziehen, wenn möglich ohne fstab zu lösen, da ich das USB-Laufwerk nicht als permanent angeschlossen behandeln möchte.


Nach dem Versuch der ersten Antwort:

$ systemctl cat --no-pager transmission.service
# Warning: transmission.service changed on disk, the version systemd has loaded is outdated.
# This output shows the current version of the unit's original fragment and drop-in files.
# If fragments or drop-ins were added or removed, they are not properly reflected in this output.
# Run 'systemctl daemon-reload' to reload units.
# /lib/systemd/system/transmission.service
[Unit]
Description=Transmission BitTorrent Daemon
After=udisks-glue.service

[Service]
User=osmc
Group=osmc
Type=notify
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/transmission-daemon -f --log-error --allowed *.*.*.*

[Install]
WantedBy=multi-user.target

# /etc/systemd/system/transmission.service.d/override.conf

[Unit]
RequiresMountsFor=/media/Elements

[Install]
WantedBy=media-Elements.mount
Andreas
quelle

Antworten:

6

EDIT : Es stellte sich heraus, dass mein erster Ansatz nicht wie erwartet funktioniert hat. Ein [Install]Abschnitt in einer Überschreibungsdatei funktioniert nicht wirklich und RequiresMountsFor=scheint nur für Mounts zu funktionieren, die in fstab deklariert sind. Daher schlage ich eine Alternative vor, die die gleichen Effekte erzielt, jedoch unterschiedliche Richtlinien verwendet.

Um zu verhindern, dass das Gerät gestartet wird, wenn das /media/ElementsVolume nicht bereitgestellt ist, verwenden Sie die ConditionPathIsMountPoint=Anweisung, die dies überprüft, und verhindern Sie, dass das Gerät gestartet wird, wenn dieses Verzeichnis nicht bereitgestellt wird.

# /etc/systemd/system/transmission.service.d/override.conf

[Unit]
ConditionPathIsMountPoint=/media/Elements

(HINWEIS: Mit dem systemctl edit transmission.serviceBefehl können Sie einen Editor für diese Überschreibungsdatei öffnen.)

Um den Start transmission.servicejedes Mal auszulösen, wenn der USB-Anschluss bereitgestellt wird, müssen Sie einen Symlink zu einem .wants/Verzeichnis für die Bereitstellungseinheit hinzufügen . (Im Idealfall wird dies von einem [Install]Abschnitt erledigt, aber es scheint nicht mit einer Überschreibungsdatei zu funktionieren.)

Erstellen Sie es manuell mit diesen beiden Befehlen:

$ sudo mkdir -p /etc/systemd/system/media-Elements.mount.wants/
$ sudo ln -sf /lib/systemd/system/transmission.service /etc/systemd/system/media-Elements.mount.wants/

Nachdem dies geschehen ist, montieren Sie /media/Elementsund sehen Sie, wie die Übertragung gestartet wird ...


Originalantwort unten ...

Die After=Direktive wirkt sich also nur auf die Reihenfolge aus. Wenn beide Einheiten zum Starten in die Warteschlange gestellt werden, wird diese nach Abschluss der anderen gestartet, löst jedoch nicht den Start der anderen aus. Das brauchst du Requires=dafür.

Aber für Reittiere gibt es eine nette Verknüpfung RequiresMountsFor=, die die Reittiere als Pfade verwenden kann.

Sie möchten dies wahrscheinlich auch so einrichten, dass dieses Gerät gestartet wird, wenn das USB-Laufwerk montiert ist. Sie können dies auslösen, indem Sie WantedBy=(im [Install]Abschnitt) verwenden und .mountvon hier aus auf das Gerät verweisen . Nachdem Sie dies eingerichtet und systemctl enablezum Erstellen der Beziehung "Gesucht" verwendet haben, wird der Start dieses Geräts (auch) ausgelöst, wenn das USB-Laufwerk bereitgestellt wird (falls dies später und nicht während des Startvorgangs erfolgt).

Alles zusammen:

# /etc/systemd/system/transmission.service.d/override.conf

[Unit]
RequiresMountsFor=/media/Elements "/media/Vault 13" "/media/Black Mesa"

[Install]
WantedBy=media-Elements.mount
WantedBy=media-Vault\x2013.mount
WantedBy=media-Black\x20Mesa.mount

Aktivieren Sie dann diese Einheit, die Symlinks unter den *.mount.wants/Verzeichnissen erstellt (die genauen Symlinknamen werden in der systemctl enableAusgabe gedruckt ):

# systemctl enable transmission.service

Dies sollte sich darum kümmern.

Mir ist nicht klar, warum Sie die drei Halterungen auflisten, da im Text der Frage, die Sie vorschlagen, nur /media/Elementszum Speichern von Übertragungsdownloads verwendet wird ... Wenn dies tatsächlich der Fall ist, könnten Sie wahrscheinlich die beiden anderen entfernen und nur die Referenzen behalten zu den "Elementen".

( HINWEIS : Ich habe dies noch nicht vor dem Posten getestet, bin aber ziemlich sicher, dass dies funktionieren wird. Wenn dies aus irgendeinem Grund nicht der Fall ist, hinterlassen Sie mir einen Kommentar mit weiteren Details. Ich arbeite gerne mit Ihnen zusammen, um dies herauszufinden das raus.)

filbranden
quelle
Hey, danke für die Antwort und die gründliche Erklärung! Ich hatte noch keine Gelegenheit, es zu testen, aber ich kann Ihnen zumindest versichern, dass der Übertragungsdienst bereits startet. Wenn ich das richtig verstehe, bedeutet dies, dass die von Aftermir geschriebenen Anweisungen einfach nicht funktionieren. Oder dass meine Annahme falsch ist, dass langsames automatisches Mounten das Problem ist. Ich werde Ihre Lösung ausprobieren und zusätzlich den Inhalt von posten transmission.service.
Andreas
Sie haben Recht mit den beiden anderen Reittieren. Ich habe sie nur aufgelistet, um transparent zu sein, was ich tatsächlich getan habe. Ich habe Ihr Beispiel vereinfacht und nur verwendet /media/Elements, aber leider hat es keinen Unterschied gemacht - das Problem bleibt bestehen. Ich habe Transmission.service nach dem Booten manuell neu gestartet und kann auf diese Weise erneut bestätigen, dass das Problem behoben ist. Es scheint also, dass ich zumindest versuche, das richtige Problem zu lösen.
Andreas
Der .serviceVollständigkeit halber habe ich den Inhalt der Datei zur Frage hinzugefügt .
Andreas
@Andreas kannst du dir bitte die Ausgabe von ansehen systemctl cat transmission.service? Ich bin interessiert, ob es die Laufzeiteinheit mit Drop-In anzeigt. systemctl --help | grep "^ cat"sagt "cat PATTERN ... Zeige Dateien und Drop-Ins einer oder mehrerer Einheiten"
Ingo
1
@Andreas Das Problem mit [Install]Abschnitten in Überschreibungsdateien wurde kürzlich in der Systemd-Mailingliste angesprochen . Es scheint, dass es einen Fehler in den Systemd-Versionen v236 bis v238 gab, aber v235 funktioniert und ein Fix ist bereits vorhanden. Wenn v239 veröffentlicht wird, enthält es den Fix. lists.freedesktop.org/archives/systemd-devel/2018-May/…
filbranden