Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Usługa systemd do wyłączania innego komutera - problem
#1
0
Mam problem związany ze stworzeniem usługi systemd, która automatycznie wyłączyłaby
inny komputer (z oprogramowaniem do synchronizacji plików - syncthing).
Chciałbym, żeby przy wyłączaniu mojego głównego komputera (Linux Mint 21.3 Cinnamon)
automatycznie wyłączać "serwer" z syncthing.
Serwer stoi na Ubuntu 22.04 LTS na Raspberry PI 4.


Kroki, które podjąłem - kod skryptu bash:
Kod:
#!/bin/bash
USER="root"
HOST="raspberrypi.local"
ssh -i /home/kola/.ssh/id_rsa $USER@$HOST "shutdown -h now"
Skrypt działa poprawnie (próbowałem na koncie użytkownika - kola
i po sudo su na koncie root'a - działa za każdym razem).


Plik z kodem usługi systemd:
Kod:
[Unit]
Description=My shutdown script
Requires=network.target local-fs.target nss-lookup.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/kola/syncthing/skrypty/raspberry_OFF
[Install]
WantedBy=multi-user.target


Prawdopodobnie powyżej coś robię źle (ale próbowałem też innych opcji w [Install] typu shutdown.target, halt.target ..., oczywiście dając wtedy skrypt do ExecStart ... kombinowałem też z zależnościami, ogólnie wszystko co znalazłem gdzieś na forach, ale nic z tego nie działa).

Usługa oczywiście aktywowana w systemie:
Kod:
root@desktop1:/home/kola# sudo systemctl status before_shutdown.service
● before_shutdown.service - My shutdown script
    Loaded: loaded (/etc/systemd/system/before_shutdown.service; enabled; vend>
    Active: active (exited) since Sat 2024-04-06 23:10:48 CEST; 29min ago
    Process: 1094 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
  Main PID: 1094 (code=exited, status=0/SUCCESS)
        CPU: 597us
kwi 06 23:10:48 desktop1 systemd[1]: Starting My shutdown script...
kwi 06 23:10:48 desktop1 systemd[1]: Finished My shutdown script.


Prawdopodobnie (tak myślę, mogę się mylić bo pomysły mi się wyczerpały) jakiś zależności mi brakuje najpewniej
patrząc na błąd coś z rozpoznawaniem nazw sieciowych (przy czym próbowałem różnych
konfiguracji) - ale w Requires mam nss-lookup.target ... .


Przykładowe logi z journalctl -u before_shutdown.service

Kod:
-- Boot 296c12278521492d9972b2ab84b1f3d7 --
kwi 07 00:17:55 desktop1 systemd[1]: Starting My shutdown script...
kwi 07 00:17:55 desktop1 systemd[1]: Finished My shutdown script.
kwi 07 00:19:39 desktop1 systemd[1]: Stopping My shutdown script...
kwi 07 00:19:39 desktop1 raspberry_OFF[4386]: ssh: Could not resolve hostname r>
kwi 07 00:19:39 desktop1 systemd[1]: before_shutdown.service: Control process e>
kwi 07 00:19:39 desktop1 systemd[1]: before_shutdown.service: Failed with resul>
kwi 07 00:19:39 desktop1 systemd[1]: Stopped My shutdown script.
-- Boot b32ef47f510440cd9852f1c3d6304397 --
kwi 07 00:20:24 desktop1 systemd[1]: Starting My shutdown script...
kwi 07 00:20:24 desktop1 systemd[1]: Finished My shutdown script.
kwi 07 00:22:00 desktop1 systemd[1]: Stopping My shutdown script...
kwi 07 00:22:01 desktop1 raspberry_OFF[4614]: ssh: Could not resolve hostname r>
kwi 07 00:22:01 desktop1 systemd[1]: before_shutdown.service: Control process e>
kwi 07 00:22:01 desktop1 systemd[1]: before_shutdown.service: Failed with resul>
kwi 07 00:22:01 desktop1 systemd[1]: Stopped My shutdown script.
-- Boot d400aae6994f4a249b4657ce2debd055 --
kwi 07 00:22:47 desktop1 systemd[1]: Starting My shutdown script...
kwi 07 00:22:47 desktop1 systemd[1]: Finished My shutdown script.
kwi 07 00:25:00 desktop1 systemd[1]: Stopping My shutdown script...
kwi 07 00:25:00 desktop1 raspberry_OFF[4744]: ssh: Could not resolve hostname r>
kwi 07 00:25:00 desktop1 systemd[1]: before_shutdown.service: Control process e>
kwi 07 00:25:00 desktop1 systemd[1]: before_shutdown.service: Failed with resul>
kwi 07 00:25:00 desktop1 systemd[1]: Stopped My shutdown script.
-- Boot ec2e405374c0454ea7239b200af02f6f --
kwi 07 00:25:46 desktop1 systemd[1]: Starting My shutdown script...
kwi 07 00:25:46 desktop1 systemd[1]: Finished My shutdown script.


Jak ktoś wiedziałby co jest do zmiany, to proszę o pomoc.
Odpowiedz
#2
0
Proszę o używanie tagów code.

Kod:
ssh -i /home/kola/.ssh/id_rsa $USER@$HOST "shutdown -h now"

Tutaj jest błąd:
Kod:
ssh -i /home/kola/.ssh/id_rsa $USER@$HOST "sudo shutdown -h now"

Dodatkowo sudo wymaga konfiguracji: https://askubuntu.com/questions/924816/h...doers-file
[Obrazek: userbar.png]
Prowadzę to forum od roku 2007. Przez ten czas projekt minta bardzo negatywnie się zmienił, stąd mogą w moich postach być opinie z którymi można się nie zgadzać.
Odpowiedz
#3
0
Dzięki za próbę pomocy, ale zwróć uwagę, że loguję się na konto root na raspberry - napisałem,
że skrypt działa poprawnie z każdego konta - problem jest z usługą.
Odpowiedz
#4
0
Kod:
kwi 07 00:25:00 desktop1 raspberry_OFF[4744]: ssh: Could not resolve hostname r>

Tu jest problem. Skrypt nie może się połączyć do raspberry pi.
[Obrazek: userbar.png]
Prowadzę to forum od roku 2007. Przez ten czas projekt minta bardzo negatywnie się zmienił, stąd mogą w moich postach być opinie z którymi można się nie zgadzać.
Odpowiedz
#5
0
Też to napisałem w pytaniu ... Nie wiem właśnie co jest nie tak ...
Przy czym skrypt jeszcze raz napiszę bez problemu wyłącza raspberry,
jak dopiero ten skrypt odpalam z usługi to się robi problem ... .

Moje podejrzenie - coś innego jest wyłączone wcześniej co jest
potrzebne do rozpoznawania nazw sieciowych, ale nie mam pojęcia
co ...
Odpowiedz
#6
1
Better response on post RE: Usługa systemd do wyłączania innego komutera - problemavahi-daemon.service brakuje prawdopodobnie lub coś powiązanego z systemd-resolved.
[Obrazek: userbar.png]
Prowadzę to forum od roku 2007. Przez ten czas projekt minta bardzo negatywnie się zmienił, stąd mogą w moich postach być opinie z którymi można się nie zgadzać.
Odpowiedz
#7
0
O dzięki wielkie, strzał w 10, chociaż wcześniej też to próbowałem, ale bez większego
zrozumienia, Teraz dorzuciłem kilka elementów - razem z avahi-daemon.service ale
w linii After (szczerze pisząc, nie wiem czy dla samego Reuires też to pójdzie czy nie).
W każdym razie działające rozwiązanie podaje poniżej (może komuś się przyda, żeby
fajnie zautomatyzować sobie środowisko pracy):

Kod:
[Unit]
Description=My shutdown script
Requires=network-online.target local-fs.target nss-lookup.target avahi-daemon.service
After=network-online.target nss-lookup.target avahi-daemon.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/kola/syncthing/skrypty/raspberry_OFF


[Install]
WantedBy=multi-user.target


teraz w journalctl -u before_shutdown.service mam:
Kod:
-- Boot 4617b26b1bfb4ec790ad9d32af89d5ab --
kwi 07 19:59:07 desktop1 systemd[1]: Starting My shutdown script...
kwi 07 19:59:07 desktop1 systemd[1]: Finished My shutdown script.
kwi 07 20:03:16 desktop1 systemd[1]: Stopping My shutdown script...
kwi 07 20:03:18 desktop1 raspberry_OFF[5212]: Connection to raspberrypi.local closed by remote host.
kwi 07 20:03:18 desktop1 systemd[1]: before_shutdown.service: Control process exited, code=exited, status=255/EXCEPTION
kwi 07 20:03:18 desktop1 systemd[1]: before_shutdown.service: Failed with result 'exit-code'.
kwi 07 20:03:18 desktop1 systemd[1]: Stopped My shutdown script.
-- Boot e92a93357b9c432f9e39c7b333389acc --
kwi 07 20:04:12 desktop1 systemd[1]: Starting My shutdown script...
kwi 07 20:04:12 desktop1 systemd[1]: Finished My shutdown script.
kwi 07 20:09:28 desktop1 systemd[1]: Stopping My shutdown script...
kwi 07 20:09:37 desktop1 raspberry_OFF[5179]: Connection to raspberrypi.local closed by remote host.
kwi 07 20:09:37 desktop1 systemd[1]: before_shutdown.service: Control process exited, code=exited, status=255/EXCEPTION
kwi 07 20:09:37 desktop1 systemd[1]: before_shutdown.service: Failed with result 'exit-code'.
kwi 07 20:09:37 desktop1 systemd[1]: Stopped My shutdown script.
ale za każdym razem (4 razy testowałem wyłączanie) wyłącza mi serwerek z raspberry pi.

Jeszcze raz dzięki i pozdrawiam Wink
Odpowiedz


Skocz do:




Użytkownicy przeglądający ten wątek: 4 gości