Ich habe eine Fedora 23 Maschine.
Ich habe ein Verzeichnis- / Dateisynchronisierungs-Bash-Skript, das mein lokales / Home-Verzeichnis mit einem Remote-Verzeichnis (auf einem NAS-Computer) synchronisiert. Ich führe es manuell aus, möchte aber einen systemd-Dienst erstellen und ihn flexibler gestalten, da andere Benutzer meinen PC mit ihren eigenen Benutzeranmeldeinformationen verwenden. Ich möchte wissen, wann ein Benutzer angemeldet ist, und anschließend meinen Dienst starten.
Kann ich etwas aus der systemd-Datei meines Dienstes heraus tun oder muss ich das anhand meines Codes im Skript überprüfen?
Ich muss nur sicherstellen, dass ich Zugriff auf Umgebungsvariablen (wie $ USER) habe, und es als Dienst ausführen.
Meine Hauptdokumentationsquelle ist dieser Link https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html
systemctl --user
F23?76 loaded units listed
..bashrc
beim Anmelden starten . Dann wartet es auf das Gnome-Abmeldesignal und fährt sich selbst herunter.Antworten:
Verwenden Sie systemd , das bereits Unterstützung für Benutzersitzungen enthält. Sie sollten sich bereits darauf verlassen (unabsichtlich).
Erstellen Sie das Serviceverzeichnis
Erstellen Bearbeiten Sie eine Servicedatei (vim, gedit, geany - was auch immer Sie wollen)
Es sollte ungefähr so aussehen, wenn es sich um einen permanenten Dienst handelt.
Aber es hört sich so an, als ob Sie es lieber einmal auslösen und dann gut damit umgehen möchten. Verwenden Sie also lieber eine One-Shot-Konfiguration wie diese:
Dies setzt natürlich voraus, dass Ihr Skript ausführbar ist, dh:
Andernfalls müssten Sie den Pfad zum jeweiligen Interpreter voranstellen:
Laden Sie nun systemd neu (und melden Sie sich zum Testen erneut an).
Wenn Sie weitere Informationen benötigen, lesen Sie beispielsweise das Arch-Wiki . Dieser Askubuntu-Thread hat verschiedene Ideen, darunter übrigens meine.
Sie können das Verhalten (wenn Sie Root sind) auf andere Benutzer ausweiten, indem Sie den Dienst global definieren. Dazu müssten Sie die Servicedatei in / usr / share / systemd / user / not in $ HOME / .local / share / systemd / user erstellen .
quelle
Ich weiß das ein paar Jahre alt, aber die Antwort von anx hat mir nur geholfen. Also, ich denke es ist immer noch relevant. Auch dies ist eher ein Kommentar, aber ich habe dieses Privileg nicht, also poste ich es als "Antwort". Jedenfalls...
Unter Linux Mint 19 konnte ich den Dienst nicht "aktivieren", wenn sich das Skript in "$ HOME / .local / share / systemd / user" befand. Der Versuch, dies zu tun, führte immer zu einem Fehler. Ich könnte es jedoch problemlos über das Verzeichnis '$ HOME / .local / share / systemd / user' starten. Nachdem ich das Skript in '/ usr / share / systemd / user /' verschoben hatte, erlaubte mir systemd, es ohne Probleme zu aktivieren.
quelle