Serengeti
Anmeldungsdatum: 24. Februar 2008
Beiträge: 1928
|
Ich habe eine Applikation dies sich ohne installieren aus einem Verzeichnis starten lässt. Diese Anwendung muss automatisch gestartet werden.
Dazu habe ich im entsprechenden Anwendungsverzeichnis eine .service Datei erstellt und mittels systemctl enable {Pfad-zur-service-Datei} installiert. Dennoch ist die Service-Datei nach einem Neustart des Systems wieder deaktiviert. Ich vermute, dass die Festplatte zu spät gemountet wird.
Zurzeit habe ich
[Unit]
RequiresMountsFor=/home/user/mountpoint
hinterlegt und dennoch scheint es nicht zu funktionieren. Kann mir hier wer weiterhelfen?
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Hallo! Beschreibe bitte mal genauer: Was für ein Programm soll gestartet werden? Wie wird das ausgeführt? (Script, Executable, Interpreter-Umgebung nötig,…) Welche Umgebungsvariablen müssen bis dato gesetzt sein? Ist der Mountpoint lokal oder im Netz? Wie sieht deine Unit komplett aus?
|
Serengeti
(Themenstarter)
Anmeldungsdatum: 24. Februar 2008
Beiträge: 1928
|
Das service File ist in /home/user/Daten/Tools/LanguageTool/ abgelegt und wurde mit systemctl enable /home/user/Daten/Tools/LanguageTool/langagetool.service aktiviert.
Das Device is eine zweite festplatte im Syste fstab
UUID=e2732f9a-b45b-4a8e-639e-6201ca02d0ae / ext4 errors=remount-ro 0 1
UUID=02c511ab-c08a-4bab-740f-f19861e63747 /home btrfs defaults,subvol=@home 0 2
UUID=ba497122-39dd-4d50-95dc-8ce8cec9aa97 /home/user/3 ext4 defaults 0 2 languagetool.service
[Unit]
Description=Rechtschreib Prüfung - Languagetool
After=network.target
[Service]
ExecStart=/usr/bin/java -cp '/home/user/Daten/Tools/LanguageTool/languagetool-server.jar' org.languagetool.server.HTTPServer --port 8081 --allow-origin '*' --languageModel '/home/user/Daten/Tools/ngrams/'
Restart=always
Type=simple
User=user
WorkingDirectory=/home/user/Daten/Tools/LanguageTool
[Install]
WantedBy=network.target
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Serengeti schrieb: Das service File ist in /home/user/Daten/Tools/LanguageTool/ abgelegt
Da gehört es nicht hin, sondern nach /etc/systemd/system/, wenn es als Systemdienst laufen soll. und wurde mit systemctl enable /home/user/Daten/Tools/LanguageTool/langagetool.service aktiviert.
Das solltest du rückgängig machen und die Unit ordentlich aktivieren:
systemctl disable /home/user/Daten/Tools/LanguageTool/langagetool.service
systemctl enable --now langagetool.service
|
Serengeti
(Themenstarter)
Anmeldungsdatum: 24. Februar 2008
Beiträge: 1928
|
Ich habe jetzt im ordner /home/user/Daten/Tools/LanguageTool/ dieses script erstellt um es mir etwas einfacher zu machen beim einrichten und modifizieren. | #! /bin/bash
SUDO=''
if [ $(id -u) != 0 ]; then
SUDO='sudo'
fi
$SUDO cp -v "$PWD/languagetool.service" "/etc/systemd/system/"
$SUDO systemctl enable --now languagetool.service
|
Nun klappt alles wie gewünscht.
Schade, dass es nicht über ein gemountetes Laufwerk hinaus verknüpft geht.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Serengeti schrieb: Ich habe jetzt im ordner /home/user/Daten/Tools/LanguageTool/ dieses script erstellt um es mir etwas einfacher zu machen beim einrichten und modifizieren.
Wenn Du Dienste öfters aktivierst und deaktivierst, dann nutzt Du wahrscheinlich nicht das richtige Werkzeug.
| #! /bin/bash
SUDO=''
if [ $(id -u) != 0 ]; then
SUDO='sudo'
fi
$SUDO cp -v "$PWD/languagetool.service" "/etc/systemd/system/"
$SUDO systemctl enable --now languagetool.service
|
Nun klappt alles wie gewünscht.
Das sieht aus, als ob Du ein Skript schreibst, um es exakt ein Mal auszuführen? Das kommt mir verschwenderisch vor.
Schade, dass es nicht über ein gemountetes Laufwerk hinaus verknüpft geht.
Es geht darum, dass Systemd definierte Verzeichnisse hat, wo die Units abgelegt werden müssen. Das hat nix mit dem Mounten zu tun.
|
Serengeti
(Themenstarter)
Anmeldungsdatum: 24. Februar 2008
Beiträge: 1928
|
rklm schrieb: Das sieht aus, als ob Du ein Skript schreibst, um es exakt ein Mal auszuführen? Das kommt mir verschwenderisch vor.
Wenn ich Neuerungen an einem bestimmten PC einführe, die ich behalten möchte, dann schreibe ich diese in ein Install Script. Ich installiere mein PC inkl. home-verzeichnis jedes Jahr neu. Damit verfolge ich zwei ziele. Zum ersten ich habe ich auf diesem PC immer ein frisch aufgesetztes System ohne Altlasten. Zum Zweiten ist das Script gleichzeitig mein Nachschlagewerk für neu gelernte Sachen. Wie jetzt die Bedienung für SystemD. Unter Linux muss ich nur erstaunlich selten etwas in der Konsole auf eine weise ändern, was ich schonmal machen musste, daher lerne ich kaum etwas durch Wiederholen. Die ersten fünf Zeilen meines Bash-Scriptes sind Standard für Dinge, die ich als Root machen muss und daher auch kein Aufwand.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Serengeti schrieb: rklm schrieb: Das sieht aus, als ob Du ein Skript schreibst, um es exakt ein Mal auszuführen? Das kommt mir verschwenderisch vor.
Wenn ich Neuerungen an einem bestimmten PC einführe, die ich behalten möchte, dann schreibe ich diese in ein Install Script. Ich installiere mein PC inkl. home-verzeichnis jedes Jahr neu. Damit verfolge ich zwei ziele. Zum ersten ich habe ich auf diesem PC immer ein frisch aufgesetztes System ohne Altlasten. Zum Zweiten ist das Script gleichzeitig mein Nachschlagewerk für neu gelernte Sachen. Wie jetzt die Bedienung für SystemD. Unter Linux muss ich nur erstaunlich selten etwas in der Konsole auf eine weise ändern, was ich schonmal machen musste, daher lerne ich kaum etwas durch Wiederholen.
Ah, dann macht das natürlich Sinn.
Die ersten fünf Zeilen meines Bash-Scriptes sind Standard für Dinge, die ich als Root machen muss und daher auch kein Aufwand.
Bei mir sieht das immer so aus: | #!/bin/sh
[ $(id -u) -eq 0 ] || exec sudo "DEBUG=$DEBUG" "$0" "$@"
[ -z "$DEBUG" ] || set -x
|
Damit erreiche ich zweierlei:
Das gesamte Skript wird immer als "root" ausgeführt. Das hat den Vorteil, dass die Authentifizierung unterwegs nicht flöten gehen kann. Wenn Du sudo bei einzelnen Kommandos aufrufst, kann es halt passieren, dass Du mittendrin Dein Passwort eingeben musst, wenn es mal wieder etwas länger dauert. Andererseits hat Dein Ansatz den Vorteil, dass Root-Rechte nur da vorliegen, wo sie auch gebraucht werden. Wenn man die Umgebungsvariable DEBUG setzt, gibt es Debug-Ausgaben. Man kann das auch für einen Aufruf machen DEBUG=y script arg . Da ich die überall verwende, erstreckt sich das Debugging dann auch auf andere aufgerufene Skripte, falls das der Fall sein sollte.
|