Używam Ubuntu 16.04 na starym laptopie HP
Zainstalowałem na nim trochę oprogramowania, aby stworzyć mały domowy serwer plex. Zainstalowałem sonarr, radarr, potop, jackett itp. I wszystkie uruchamiają się automatycznie podczas uruchamiania!
Kilka dni temu zdecydowałem się również zainstalować rclone i utworzyłem (dzięki projektowi GitHub) kilka folderów, które należy zamontować przy każdym uruchomieniu poprzez uruchomienie skryptu (uruchamiam go przez pisanie terminala sudo ~/bin/check.mount
). Sonarr i Radarr są skonfigurowane do pobierania rzeczy przez potop do folderu tymczasowego, a następnie eksportowania go do jednego z tych dwóch zamontowanych folderów.
Problem polega na tym, że do czasu ręcznego uruchomienia skryptu Sonarr / Radarr są już uruchomione i nie mogą znaleźć swoich folderów głównych, więc dają mi błąd.
Chciałbym utworzyć mountgdrive.service (usługa lub cokolwiek jest konieczne), aby automatycznie uruchomić skrypt check.mount i, jeśli to nie wystarczy, wstawić opóźnienie w sonarr.service i radarr.service! Czy to jest możliwe?
Napisałem to z 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
i dodałem trochę do sonarr.service i radarr.service, mountgdrive.service
w After=
ten sposób
[Unit]
Description=Sonarr
After=syslog.target network.target mountgdrive.service
[Service]
User=samsepioldoresh4ze
etcetc
....
Ale to nie działa! Sonarr i Radarr uruchamiają się normalnie, ale napędy nie są zamontowane! Co ja robię źle?
Ponadto rtcwake nie działa na moim laptopie - myślę, że to problem z jądrem ?! Czy istnieje sposób, aby to naprawić?
sonarr.service
i chceszradarr.service
być uruchomiony pomountgdrive.service
uruchomieniu?mountgdrive.service
działa, ale nic nie robi (nie montować dyski), a następniesonarr.service
iradarr.service
działać normalnie, bo ubuntu straconymountgdrive.service
.mount
jednostek . Jeśli wszystko, comountgdrive.service
robisz, to podłączenie katalogu lub podobnego elementu, możesz być w stanie zmienić go na.mount
usługę. Ponieważ sprawia, że jest bardziej niezawodny, ponieważ masz na nim zależności.Odpowiedzi:
Przyczyną tego problemu jest to, że używasz go,
After=
gdy potrzebujeszRequires=
lubWants=
.Istnieją 3 główne właściwości zarządzania zależnościami. Spróbuję krótko wyjaśnić różnicę, ale więcej szczegółów znajdziesz w sekcji Opcje [Jednostka] | freedesktop.org
After=
Ta opcja ustawia tylko kolejność jednostek, nie gwarantuje, że usługa zakończyła uruchamianie.
Wants=
Ta opcja umożliwia uruchomienie jednostki dopiero po zakończeniu uruchamiania innej jednostki. (Nie ma znaczenia, czy to się udało, czy nie)
Requires=
Wants=
Jednak tak samo spowoduje to uruchomienie jednostki dopiero po pomyślnym uruchomieniu zależności.Możesz także użyć odwrotności każdej z tych opcji.
After=
jest odwrócony przezBefore=
Wants=
jest odwrócony przezWantedBy=
Requires=
jest odwrócony przezRequiredBy=
Aby rozwiązać problem, musisz zmienić usługę montowania na:
Lub możesz dodać
Wants=mountgdrive.service
do jednosteksonarr.service
iradarr.service
.Możesz to zrobić bez modyfikowania plików domyślnych, uruchamiając następujące czynności (musisz zrobić to samo dla
radarr.service
):I wstaw następujące:
Uwaga: Można wymienić
Wants=
zRequires
lubWantedBy=
zRequiredBy=
, jeśli nie chcesz, aby uruchomić dwie usługi w ogóle, jeślimountgdrive.service
nie powiedzie się (choćWants=
jest zwykle na tyle, a nawet zalecane w docs).EDYCJA: Z opcji
WantedBy
iRequiredBy
można korzystać tylko w[Install]
sekcji. (Dzięki @Yankee )źródło
Wants=
i naWantedBy=
pewno ich użyję !! Ten błąd pojawia się jednak po ponownym uruchomieniu laptopa i.imgur.com/a3LE3G9.pngCan't open /.config/SmokeScreen/smokescreen.conf
. Może masz „~ / .config / ...” w skrypcie yoru. Powinieneś zastąpić tyldę (~
) pełną ścieżką, tj./home/you_user_name/.config/....
(Lub użyć ścieżek względnych do skryptu)$HOME
nie jest dostępny w czasie uruchamiania, ponieważ nie ma jeszcze zalogowanego użytkownika.WantedBy=
być w[Unit]
dziale? Myślałem, że może tylko wejść[Install]
.