Du bist nicht angemeldet.

#1 17.11.2020 19:17:25

Saptah
Mitglied

Systemd timer Anfängerfrage

Hallo,
ich arbeite noch nicht lange mit Archlinux und hatte bisher immer Ubuntu/Debian verwendet. Ich würde nun gerne statt Cronjobs den sytemd timer verwenden. Hierzu habe ich einen Testtimer angelegt, um dies auszuprobieren, leider funktioniert es nicht wie es sollte: Der gewünschte Befehl wird nicht ausgeführt.

Folgende Dateien habe ich angelegt :

cat /etc/systemd/system/beispiel.timer 
[Unit]
Description=Beispielaktion 


[Timer]
OnCalendar=minutely
Unit=beispiel.service
Persistent=true
AccuracySec=10s

[Install]
WantedBy=timers.target
cat /etc/systemd/system/beispiel.service 
[Unit]
Description=Beispiel Service

[Service]
Type=simple
User=martin
ExecStart=/bin/bash /home/martin/Desktop/nemo.sh

Anschließend habe ich folgendes ausgeführt:

 systemctl daemon-reload 
 systemctl enable --now beispiel.timer 

Der Timer läuft entsprechend:

systemctl status beispiel.timer 

● beispiel.timer - Beispielaktion
     Loaded: loaded (/etc/systemd/system/beispiel.timer; enabled; vendor preset: disabled)
     Active: active (waiting) since Tue 2020-11-17 18:12:54 CET; 35s ago
    Trigger: Tue 2020-11-17 18:14:00 CET; 29s left
   Triggers: ● beispiel.service

Nov 17 18:12:54 Martins-PC systemd[1]: Started Beispielaktion.

Die Aktion (Das Skript wird aber nach Ablauf der Zeit nicht ausgeführt), Inhalt des Testskriptes:

#!/bin/bash
nemo

Die Frage ist nun, wo mein Fehler liegt sad   ??

Offline

#2 17.11.2020 19:51:46

stefanhusmann
Moderator

Re: Systemd timer Anfängerfrage

nemo ist ein graphisches Programm, und graphische Progremme lassen sich nicht ohne Weiteres als root starten. Wähle eine unverfänglichere Beispielaktion.

Offline

#3 17.11.2020 20:00:43

Saptah
Mitglied

Re: Systemd timer Anfängerfrage

stefanhusmann schrieb:

nemo ist ein graphisches Programm, und graphische Progremme lassen sich nicht ohne Weiteres als root starten. Wähle eine unverfänglichere Beispielaktion.

Ah ok, dann lag der Fehler ganz woanders, als ich dachte. Das Skript an sich funktionierte ja einwandfrei.
Wenn ich es mit einem anderen Befehl versuche, der kein graphisches Programm startet, funktioniert es tatsächlich smile

Vielen Dank !

Offline

#4 18.11.2020 18:09:20

Photor
Mitglied

Re: Systemd timer Anfängerfrage

Moin,

darf ich meine kurzen Frage kurz anschließen?

Ich würde ja auch gerne als einfacher User Timer aufsetzen. Wenn ich das will, reicht es die service- und timer-Dateien in mein HOME-Verzeichnis  (also z.B. ~/.config/systemd/; der richtige Platz?) zu packen? Oder muss ich dem SystemD noch irgendwie bekannt machen, dass er diese Timer mitstartet (wenn ich mich einlogge)?

Ich haoofe, das ist korrekt hier.

Ciao,
Photor

Offline

#5 18.11.2020 18:57:45

Gerry_Ghetto
Mitglied

Re: Systemd timer Anfängerfrage

Schau dir mal

man 5 systemd.unit

an.

Ich starte beispielsweise den ssh-agent mit einer systemd User-Unit unter ~/.config/systemd/user/ssh-agent.service.

Zum Starten/Aktivieren/Deaktivieren, musst du dann noch das `--user` Flag angeben.

Offline

#6 18.11.2020 19:45:39

Saptah
Mitglied

Re: Systemd timer Anfängerfrage

Photor schrieb:

Moin,

darf ich meine kurzen Frage kurz anschließen?

Ich würde ja auch gerne als einfacher User Timer aufsetzen. Wenn ich das will, reicht es die service- und timer-Dateien in mein HOME-Verzeichnis  (also z.B. ~/.config/systemd/; der richtige Platz?) zu packen? Oder muss ich dem SystemD noch irgendwie bekannt machen, dass er diese Timer mitstartet (wenn ich mich einlogge)?

Ich haoofe, das ist korrekt hier.

Ciao,
Photor


Also ich habe die .service und .timer Dateien auch mal in folgendes Verzeichnis verschoben:   ~/.config/systemd/user

Man startet den timer dann mit:

systemctl --user enable --now beispiel.timer 

Dieser Timer sollte dann bei jedem Systemstart geladen werden.

Offline

#7 19.11.2020 20:27:32

Photor
Mitglied

Re: Systemd timer Anfängerfrage

Moin,

sowas habe ich jetzt ausprobiert - und das funktioniert auch. Wieder was gelernt. smile Guter Tag.

Nun würde ich gerne Mail mit isync beim Provider abholen. Dazu wird aber eine Passwort benötigt (das ich nicht fest in die config von isync packen will). Ich nutze pass um die Passworte zu speichern, und die kann ich auch abrufen - wenn ich isync von Hand starte, fragt er das Master-Passwort interaktiv ab.

Wie wird das gemacht, wenn ich isync per Script bzw. Timer starte?

Ciao,
Photor

PS: wenn das langsam nicht mehr zu diesem Thread passt, mache ich gerne einen neuen auf. Ich denke allerdings, dass es noch unter das Thema "Timer" und "Anfänger" fällt.

Offline

#8 19.11.2020 21:16:14

Saptah
Mitglied

Re: Systemd timer Anfängerfrage

Photor schrieb:

Moin,

sowas habe ich jetzt ausprobiert - und das funktioniert auch. Wieder was gelernt. smile Guter Tag.

Nun würde ich gerne Mail mit isync beim Provider abholen. Dazu wird aber eine Passwort benötigt (das ich nicht fest in die config von isync packen will). Ich nutze pass um die Passworte zu speichern, und die kann ich auch abrufen - wenn ich isync von Hand starte, fragt er das Master-Passwort interaktiv ab.

Wie wird das gemacht, wenn ich isync per Script bzw. Timer starte?

Ciao,
Photor

PS: wenn das langsam nicht mehr zu diesem Thread passt, mache ich gerne einen neuen auf. Ich denke allerdings, dass es noch unter das Thema "Timer" und "Anfänger" fällt.

Du brauchst also eine grafische Oberfläche (Terminal) in der interaktiv nach dem Master-Passwort gefragt wird, wenn ich das richtig verstehe.
Ich hatte ja eingangs auch versucht ein grafisches Programm zu starten, wie ich es verstanden habe ist der sytemd timer dazu eigentlich nicht gedacht. Ich habe mir jetzt eine Lösung gebastelt, wie es doch gehen könnte. Ich bin Anwender, kein Programmierer und sicherlich gibt es eine bessere Lösung, "schnell und schmutzig" hat es aber so bei mir funktioniert:

Zunächst musst du Python3 installiert haben, sowie gnome-terminal. Dann legst du ein Skript mit folgendem Inhalt an (Endung des Skriptes ".py") z.B. START.py:

#START.py
import subprocess

subprocess.run(["gnome-terminal","--","python3","/home/martin/Desktop/Skript.py"])

Dieses Skript führt das Skript "Skript.py" aus, an dieser Stelle kann natürlich auch dein Skript stehen, welches alle Befehle, die nun nun von Hand eingegeben hast enthält. Hier müsste auch ein .sh Skript gehen, sofern du nicht mit Python programmierst.

In der .service-Datei wird dann unter "ExecStart=" z.B. folgendes stehen:

 python3 /home/martin/Desktop/START.py 

Die Pfade müssen natürlich angepasst werden.

D.h. der Timer startet den Service, der Service startet START.py, START,py startet die gnome-shell mit dem eigentlichen Skript. Alles andere hat durch ausprobieren nicht funktioniert. Wenn es eine elegantere Lösung gäbe wäre ich dankbar dies zu wissen.

Letztendlich möchte ich für meinen Fall auch eine Shell starten, die dann grafisch sichtbar ist, damit ich den Status des laufenden Programms weiß.

Offline

#9 19.11.2020 21:36:01

Photor
Mitglied

Re: Systemd timer Anfängerfrage

Moin,

danke erstmal für ausführliche Antwort - die muss ich mir auch noch im Detail ansehen.

Wenn ich isync (aufgerufen als mbsync) per Hand aufrufe (entweder aus einem (XFCE-)Terminal oder wenn es von Neomutt gestartet wird, öffnet sich ein Fenster zu Passwortabfrage (bin mir nicht sicher, welches Programm da genau hinter steckt). Aus Erfahrung ist das eingegebene Passwort einige Zeit gültig, verfällt aber irgendwann wieder.

Wenn jetzt mbsync sagen wir stündlich gestartet wird, poppt dann stündlich diese Fenster auf und will ein Passwort (für pass nehme ich an)? Und darf der Hintergrundprozess überhaupt ein Fenster auf meinem XFCE-Desktop öffnen?

Das ist eigentlich meine Frage (wie gesagt, muss mich noch durch deine sehr ausführliche Antwort arbeiten).

Ciao,
Photor


PS: ich fürchte ja fast, dass das mit der Passworteingabe nicht geht und ich die fix in die Config schreiben muss.

Offline

#10 19.11.2020 22:07:54

Saptah
Mitglied

Re: Systemd timer Anfängerfrage

Photor schrieb:

Moin,


Wenn jetzt mbsync sagen wir stündlich gestartet wird, poppt dann stündlich diese Fenster auf und will ein Passwort (für pass nehme ich an)? Und darf der Hintergrundprozess überhaupt ein Fenster auf meinem XFCE-Desktop öffnen?

Zum ersten Teil deiner Frage: theoretisch müsste es so sein, dass dann das Fenster regelmäßig erscheint, wenn es "benötigt" wird, das hat aber nichts mit dem Timer zu tun, sofern dein eigentliches Skript (als Prozess noch läuft). Der durch Python gestartete Prozess kann auch Fenster öffnen zumindest bei Cinnamon, bei XFCE sollte es denke ich genauso sein.

Offline

#11 20.11.2020 16:47:07

Photor
Mitglied

Re: Systemd timer Anfängerfrage

Moin,

klar, das Fenster popt immer dann auf, wenn er auf die Passworte zugreifen will, aber das Passwort für den "Passwort-Safe" (in dem Fall pass) abgelaufen ist. Das macht es auch aus verschiedenen Programmen (aus der Shell angeworfen oder aus Mutt heraus; und wenn ich ein Script schreibe, sicher auch). Bloß, das ist ja kaum praktikabel und nicht die Idee, einen Timer diese regelmäßige Aufgabe möglichst unauffällig im Hintergrund machen zu lassen.

Wenn ich das richtig verstanden habe, ist es mit secret-tool möglich, die Gnome-Passwortverwaltung anzuzapfen (Gnome-Dienste laufen); die wird mit dem Login freigeschaltet und bleibt offen, solange ich angemeldet bin - wenn richtig verstanden. Mir ist es bloß bislang nicht gelungen, damit ein Passwort zu erhalten (deshalb war ich auf pass ausgewichen):

  secret-tool lookup blah blub

liefert genau gar nichts ("blah" (=attribute) attribute und "blub" (=value) habe ich natürlich durch was sinnvolles ersetzt wink ich werde den Verdacht nicht los, durch was falsches).

Natürlich könnte ich die Passworte in ~/.mbsyncrc im Klartext reinschreiben; wenn die Rechte dann so vergeben sind, dass nur ich sie lesen kann ... so war es früher(TM) (da war es ~/.fetchmailrc)auch. Blödes Gefühl habe ich dabei aber.

Ciao,
Photor

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Deine Antwort

Fußzeile des Forums