staging.inyokaproject.org

Script - Linux-Rechner herunterfahren und zu bestimmter Zeit starten

Status: Ungelöst | Ubuntu-Version: Kubuntu 24.04 (Noble Numbat)
Antworten |

Nierewa

Avatar von Nierewa

Anmeldungsdatum:
6. März 2007

Beiträge: 85

Hallo,

um mit Tvheadend aufnehmen zu können und den Rechner nicht immer an zu lassen, wollte ich den PC gern in Standby setzten und zu einer bestimmten Zeit wieder aufwachen lassen.

Tvheadend bietet diese Möglichkeit nicht von sich aus, wie zum Bsp. der DVBViewer Media service.

Im Netz bin ich dann auf folgende Seite von Stephan Richter gestoßen: https://www.srsoftware.de/waketime

Wenn ich das richtig verstanden habe, muß ich zwei Dateien anlegen. Einmal das Script pickTime und einmal das Script waketime.

Ausgeführt wird nur waketime, zenity habe ich installiert.

Es gibt aber zwei Probleme: 1. waketime: das Script pickTime wird nicht aufgerufen, so das kein Datum angegeben wird

1
2
3
4
5
$ ./waketime: Zeile 2: pickTime: Befehl nicht gefunden
date: ungültiges Datum »@“
Rechner wird heruntergefahren und neu gestartet…
rtcwake: Diese Option benötigt ein Argument -- »t«
Rufen Sie „rtcwake --help“ auf, um weitere Informationen zu erhalten.

2. pickTime: es erscheint keine Auswahlmöglichkeit für den Tag, nur Stunde und Minute

Da ich Linux-Neuling bin, finde ich die Fehler nicht. Kann mir da jemand bei helfen?

Bearbeitet von rklm:

Link- und Code-Formatierung. Bitte beachte Forum/Syntax und nutze die Vorschaufunktion!

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3793

Ich würde auf den grafischen Zenity-Schnickschnack zur Eingabe von Datum und Zeit verzichten und rtcwake auf der Kommandozeile verwenden. Eine Übersicht über die Befehlssyntax findest du im Wiki-Artikel rtcwake oder auf der Manpage oder per

man rtcwake

Im Endeffekt braucht es nur einen Einzeiler a la

sudo rtcwake --date <datum_und_zeit> --mode <schlafmodus>

Bei mir hier funktionieren nicht alle laut Manpage verwendbaren Datumsformate. Aber wie üblich hilft da ausprobieren.

Kreuzschnabel

Anmeldungsdatum:
12. Dezember 2011

Beiträge: 1768

dingsbums schrieb:

Bei mir hier funktionieren nicht alle laut Manpage verwendbaren Datumsformate. Aber wie üblich hilft da ausprobieren.

Bei mir funktionieren auch nicht alle verwendbaren Schlafmodi, -m off z.B. nicht. Er fährt zwar runter, aber nicht wieder rauf ☺ deshalb auch hier gründlich testen. -m mem geht bei mir und spart auch schon unnötigen Systemlauf.

--ks

vmp

Anmeldungsdatum:
28. März 2018

Beiträge: 146

Das System runterzufahren geht mit dem Befehl: at

https://linuxize.com/post/at-command-in-linux/

gons@fedora:~$ at 17:46
warning: commands will be executed using /bin/sh
at Sat Jun 21 17:46:00 2025
at> shutdown -h now
at> <EOT>
job 7 at Sat Jun 21 17:46:00 2025
gons@fedora:~$

Nach Bestätigung des Befehls "shutdown -h now" mit Enter "Strg+D" drücken.

Damit der Befehl funktioniert muss man ihn als root eingeben (su -).

adelaar

Anmeldungsdatum:
23. November 2024

Beiträge: 656

Nierewa schrieb:

Da ich Linux-Neuling bin, ...

Also ich würde grundsätzlich eine ganz anderen Ansatz wählen. WOL, jedenfalls wenn es in deinem LAN noch einen Rechner gibt der immer ohnehin an ist, wie eine Firewall oder manche Router, die ein Magic Packet zum Aufwecken senden können. Mit WOL kann der zu weckende Rechner sogar vollständig ausgeschaltet sein, was man auch zeitgesteuert über ein

shutdown -h 0

als Cronjob erledigen kann.

vmp

Anmeldungsdatum:
28. März 2018

Beiträge: 146

Von hier https://forums.linuxmint.com/viewtopic.php?t=31772 stammt die Zeile:

sudo /usr/sbin/rtcwake --mode no --local --time $(date +%s --date "today 10:00")

was bei mir funktioniert.

Nierewa

(Themenstarter)
Avatar von Nierewa

Anmeldungsdatum:
6. März 2007

Beiträge: 85

WOL ist nicht das was ich priorisieren würde. Es wäre schön wenn es über diese zwei Scripte oder einer GUI funktionieren würde, falls jemand eine GUI für rtcwake kennt.

Bin da wahrscheinlich etwas "Windows verwöhnt".

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@Nierewa: Wo hast Du pickTime denn abgelegt? Das muss natürlich irgendwo liegen wo es auch gefunden wird, also in einem Verzeichnis in $PATH und es muss in den Dateirechten ausführbar sein (chmod). Oder man kombiniert das in einem Skript. Das geht allerdings nicht durch einfaches zusammen kopieren, man müsste aus dem Hauptprogramm in pickTime eine Funktion machen.

Eine GUI kann man sich recht einfach selber basteln. Beispielsweise mit Python und Qt. Ungetestet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env python3
import logging
import subprocess
import sys

from PyQt5.QtCore import QDateTime
from PyQt5.QtWidgets import (
    QApplication,
    QDateTimeEdit,
    QMessageBox,
    QPushButton,
    QVBoxLayout,
    QWidget,
)


def run_rtcwake(window, date_time):
    #
    # TODO Handle `subprocess.CalledProcessError` or the result and catch and
    #      output error messages from ``rtcwake``.
    #
    try:
        subprocess.run(
            [
                "rtcwake",
                "--dry-run",  # TODO Remove to actually do something.
                "--verbose",
                *("--mode", "mem"),
                *(
                    "--date",
                    date_time.toString("yyyy-MM-dd hh:mm"),
                ),
            ],
            check=True,
        )
    except Exception as error:
        logging.exception("can not run rtcwake")
        QMessageBox.critical(window, "Error", str(error))


def main():
    #
    # TODO Check if effective user is root and show message if not.
    #
    # TODO Check for or disallow timestamps in the future.
    #
    app = QApplication(sys.argv)
    window = QWidget(windowTitle="rtcwake GUI")
    layout = QVBoxLayout(window)
    date_time_edit = QDateTimeEdit(
        QDateTime.currentDateTime(), calendarPopup=True
    )
    layout.addWidget(date_time_edit)
    layout.addWidget(
        QPushButton(
            "Run rtcwake",
            clicked=lambda: run_rtcwake(window, date_time_edit.dateTime()),
        )
    )
    window.show()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()
Antworten |