N'abend, ich möchte meinen Linuxrechner gerne immer zur gleichen Zeit aus dem Standby aufwachen lassen und ein Pythonscript im Context des angemeldeten Users ausführen lassen. Sobald das Script alles erledigt hat, soll der Rechner wieder bis zum nächsten Aufwachen in den Standby wechseln. Der Rechner soll also nur 1 * pro Tag kurz etwas erledigen und ansonsten schlafen. Das Script funktioniert bereits in einem Terminal und auch das Aufwachen aus dem Standby (S4, Suspend to Disk) funktioniert, wenn ich es im Terminal mit sudo über rtcwake programmiere. Leider scheinen diverse Wege zu existieren, sowohl um ein Script nach dem Aufwachen zu starten, als auch um den Rechner ohne sudo in den Standby zu versetzen. Ich frage mich, ob man da einfach beliebig etwas kombinieren kann und welcher Weg ein Pythonscript problemlos im aktuellen Usercontext starten kann? Ich bin mir auch unsicher, ob das Fehlen bzw. Vorhandensein eines root accounts bei der Auswahl eine Rolle spielt. Es wäre schön, wenn mir jemand für 'Bullseye' eine sinnvolle Vorgehensweise grob erklären könnte. Tausend dank sagt: Kalle
Script dauerhaft laufen lassen und auf Zeitsprung warten? Warum eigentlich Standby? Mit ganz aus könntest du crontab und @reboot nutzen.
Um den Rechner in den Standby zu schicken, würde ich sudo nutzen und den entsprechenden Befehl für den user ohne Passwort freigeben:
1 | myuser ALL=NOPASSWD: systemctl start systemd-suspend |
Mit Systemd könntest du nach dem Aufwachen das suspend.target verwenden, um dein Script zu starten. Den user kannst du im unit file mit definieren.
> orhandensein eines root accounts bei der Auswahl eine Rolle spielt.
probiers:
zum experimentieren, sowas in der Art:
systemd-run OnCalendar=*-*-* HH:MM:SS WakeSystem=true
/usr/bin/deinskript
täglich, zur anzugebenen Zeit wach auf und ...
man systemd-run; systemd.timer WakeSystem
als user ausgeführt, (der darf jetzt noch nicht schlafen, also was anderes zum probieren) $systemd-run --on-active=10 /usr/bin/xmessage hello -display 0:0 ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to manage system services or other units. Authenticating as: root Password: sollte die Frage beantworten. ist halt interaktiv, via unit file s.o.
So jetzt, nicht ganz sicher mit der "timer-property" sollte aber schon hinkommen, hoffe doch mal das gehört zu den timer-properties ... systemd-run --on-calendar='*-*-* 10:00:00' --timer-property=WakeSystem=true /usr/bin/... Käme dann z.B. täglich um 10, nat. nur bis zum nächsten boot. vlt. hilft es weiter, schlafen schicken aus dem skript.
in der /etc/crontab folgende Zeile einfügen und zum Neustart wird datei.sh ausgeführt. @reboot username /pfadzumscript/datei.sh Mehr zur crontab unter https://wiki.ubuntuusers.de/Cron/
Wegen der Stromkosten habe ich folgende Lösung: Zeitschaltuhr Rechner startet wenn (BIOS) Power off wenn Script beendet Zeitschaltuhr schaltet nach einer halben Stunde wieder aus.
Nor schrieb: > in der /etc/crontab folgende Zeile einfügen und zum Neustart wird > datei.sh ausgeführt. > > @reboot username /pfadzumscript/datei.sh > > Mehr zur crontab unter https://wiki.ubuntuusers.de/Cron/ Der taglichen Wakeup über das BIOS dürfte am einfachsten sein und dann beim Start obiges, dann mit sudo shutdown now wieder ausschalten.
systemd hat sich doch festgesetzt. ... Running timer as unit: run-u382.timer Will run service as unit: run-u382.service und sowas ist wenigsten bei mehreren Nutzern ganz nett: journalctl -r|grep run-u382* Oct 22 09:38:23 slax polkitd(authority=local)[1462]: Operator of unix-process:16920:172801167 successfully authenticated as unix-user:root to gain TEMPORARY authorization for action org.freedesktop.systemd1.manage-units for system-bus-name::1.401 [systemctl stop run-u382.timer] (owned by unix-user:xals) ... have fun
Hallo, vielen Dank für die vielen guten Ideen. Ursprünglich wollte ich ja StandBy, aber der Vorschlag mit ganz aus und nur kurz über das Bios einschalten ist wirklich gut. Ich hatte diese Möglichkeit völlig vergessen, denn ich war schon bestimmt seit 10 Jahren nicht mehr in einem BIOS. :) Dazu dann einen systemd-service, der ein script als user startet worüber der Rechner dann auch wieder ausgeschaltet wird. Tausend Dank!
Kalle R. schrieb: > Ich hatte diese > Möglichkeit völlig vergessen, denn ich war schon bestimmt seit 10 Jahren > nicht mehr in einem BIOS Um die Start-Zeit einzustellen musst du übrigens nicht ins Bios, das geht per sysfs: /sys/class/rtc/rtc0/wakealarm -> da einfach einen Unix-Timestamp reinschreiben: # echo 1635399999 > /sys/class/rtc/rtc0/wakealarm ("date +%s" hilft beim umrechnen an der shell) oder per /usr/sbin/rtcwake aus dem util-linux paket. Die systemd-timer mit wakeup machen im Prinzip auch nichts anderes. Vorsicht: die RTC hat nur einen Wakeup-Timer, wenn da verschiedene Tools daran rumdrehen, gewinnt das letzte.
Auf den ersten Blick würde ich sagen, dass es schwierig wird soetwas zuverlässig hinzubekommen... Darf ich fragen, was der Rechner tun soll? vll. gibt es ja eine einfachere Lösung für das eigentliche Problem.
...oder die zeitschaltuhr bestromt über ein kleines C-NT und seriell einen dicken Elko (für den "kurzen" impuls) einen optokoppler der den start knopf drückt - falls das zuverlässiger wird. Bisschen dirty, hat aber einen gewissen charme - Und du kannst es in QnD posten :) Klaus.
:
Bearbeitet durch User
JJ schrieb: > Auf den ersten Blick würde ich sagen, dass es schwierig wird soetwas > zuverlässig hinzubekommen... Einen Linux-Rechner automatisch per interner Uhr zu einer bestimmten Zeit aus Powerdown aufzuwecken ist in meiner Erfahrung sehr zuverlässig. Macht mein VDR seit Ewigkeiten.
:
Bearbeitet durch User
Die einfachste Methode wurde doch bereits erklärt: - Rechner mittels /sys/class/rtc/rtc0/wakealarm aufwecken, z.B. 06:00 Uhr morgens - per Cron die gewünschte Anwendung starten (mit etwas Zeitpuffer, also 06:03 Uhr) - mit 2. Cronjob mittels systemd den Rechner runterfahren/schlafenlegen (wieder mit etwas Zeitpuffer, je nachdem wie lange die Anwendung benötigt That's all....
Markus schrieb: > (wieder mit etwas Zeitpuffer, je nachdem wie lange die Anwendung > benötigt Oder direkt als Abschlusshandlung der Anwendung.
Markus schrieb: > Die einfachste Methode wurde doch bereits erklärt: > - Rechner mittels /sys/class/rtc/rtc0/wakealarm aufwecken, z.B. 06:00 > Uhr morgens > - per Cron die gewünschte Anwendung starten (mit etwas Zeitpuffer, also > 06:03 Uhr) > - mit 2. Cronjob mittels systemd den Rechner runterfahren/schlafenlegen > (wieder mit etwas Zeitpuffer, je nachdem wie lange die Anwendung > benötigt > > That's all.... >> Cronjob mittels systemd Mnh, eher entweder cronjob oder systemd.timer systemds timer sind vermutlich eh schon in Verwendung. gib mal ein; systemctl list-timers --all Da wird recht wahrscheinlich etwas laufen sicher gibt tools die noch cronjobs anlegen, systemctl list-timers --all gegen: for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done Geh mit dem der die Jobs hat, falls crontab -l nichts berichtet würde ich es lassen. ---- was: "timer-property" diese seltsame syntax --timer-property=WakeSystem=true scheint zu stimmen erzeugt jdf. den passenden Eintrag; /run/systemd/transient/run-uNNN.timer ... [Timer] WakeSystem=yes 'systemd-run' erzeugt halt nur transiente/temporäre Dienste. Wenns funktioniert kann man ja als Ersttäter ggf. die unitfiles aus /run/systemd/transient .service .timer als Vorlage nehmen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.