Voraussetzungen

Voraussetzungen

Ich muss jeden Tag um Mitternacht ein Python-Skript starten und nach einiger Suche im Internet habe ich herausgefunden, dass ich dafür Cron verwenden kann. Mich würde interessieren, ob mein Computer aufgeweckt wird, wenn ich für Mitternacht eine Cron-Aufgabe einplane. Oder muss ich den Computer mit etwas anderem aufwecken? Ich verwende Ubuntu 16.04.

Antwort1

Kurze Antwort:

NEIN.

Dudürfenjedoch verwendenAbonnieren. Mit rtcwakekönnen Sie den Computer aufwecken, ihn so einrichten, dass er anschließend Befehle und Skripte ausführt usw.

Zur Auswahl stehen sowohl das Aufwachen zu einer absoluten Zeit als auch das Aufwachen zu einer bestimmten Zeitspannein:

-s seconds | --seconds seconds
    Sets the wakeup time to seconds in future from now. 
-t time_t | --time time_t
    Sets the wakeup time to the absolute time time_t. time_t is the time in seconds since 1970-01-01, 00:00 UTC. Use the 

Ein Beispiel für die Verwendung von rtcwake finden Sie indiese AntwortSiehe
auch, wie immer,man rtcwake

Antwort2

Es gibt bereits eine Antwort, die erwähnt, dass Sie für diesen Zweck verwenden können rtcwake. Ich möchte etwas mehr darauf eingehenWiedu kannst es schaffen.

Voraussetzungen

Installieren Sie zunächst rtcwake(aus dem util-linuxPaket) dmidecodeund anacron:

sudo apt install util-linux dmidecode anacron

Überprüfen Sie, ob Ihr Computer aus dem Standby-Modus geweckt werden kann:

sudo rtcwake -m mem -s 30

Dadurch sollte Ihr Computer in den Standby-Modus versetzt und 30 Sekunden später aufgeweckt werden. (Ich habe 30 Sekunden gewählt, da das Versetzen Ihres Computers in den Ruhezustand oder in den Ruhezustand einige Zeit dauern kann und das Aufwecken möglicherweise nicht funktioniert, wenn die Weckzeit vor dem Ende des Standby-Prozesses liegt.)

Sie können andere Standby-Methoden als ausprobieren mem. diskInsbesondere ist eine höhere Energieeinsparung möglich, verschlüsselte Systeme können jedoch nicht aus diesem Modus reaktiviert werden, ohne das Kennwort manuell einzugeben.

Wenn Ihr Computer erfolgreich aufgewacht ist, prüfen Sie, ob sich der Grund für das Aufwachen ermitteln lässt:

sudo dmidecode | grep "Wake-up Type"

Wenn Sie Wake-up Type: APM Timerin der Ausgabe sehen, können Sie loslegen.

Ein benutzerdefiniertes Skript zum Anhalten

Wenn alle Voraussetzungen erfüllt sind, können wir ein einfaches Skript zusammenstellen, das Folgendes tut:

  • Hält den Computer an, während gleichzeitig eine Weckzeit festgelegt wird.
  • Überprüft nach dem Aufwachen, ob das Aufwachen geplant oder manuell war.
  • Wenn eine Weckzeit geplant war, führt es die Cron-Jobs aus und versetzt den Computer zurück in den Standby-Modus, um eine neue Weckzeit festzulegen.

Hier ist das Skript:

#! /bin/bash
# https://askubuntu.com/a/1323317
while true
do
  wake_at=22:05 # Set to whenever you want the cron jobs to run each day
  wake_ts="$(date -d "$wake_at" +%s)"
  now_ts="$(date +%s)"
  if [ "$wake_ts" -lt "$now_ts" ]
  then
    wake_ts="$(date -d "tomorrow $wake_at" +%s)"
  fi
  rtcwake -m mem -t "$wake_ts"

  # After wake-up
  #
  # Without this sleep, the current time would still seem to be the instant when
  # the suspend happened, confusing man and machine alike.
  sleep 1
  if dmidecode | grep -q "Wake-up Type: APM Timer"
  then
    # We trigger anacron manually. To prevent cron jobs from running during
    # active uptime, its systemd triggers need to be disabled.
    /usr/sbin/anacron -nd
  else
    exit 0
  fi
done

Dieses Skript muss als Root ausgeführt werden, daher empfehle ich, den Root-Benutzer als Eigentümer festzulegen und sudoes zu starten. Sie können den sudoers-Mechanismus verwenden, um es ohne Eingabe eines Passworts ausführen zu können, aber ich werde hier nicht näher darauf eingehen, da dies bereits in vielen Anleitungen beschrieben wird.

Um diesen Mechanismus einfacher zu nutzen, empfehle ich, einen Hotkey in Ihrer Desktop-Umgebung einzurichten. Wenn Sie das tun, sollten Sie ein Wrapper-Skript verwenden, das Ihren desktopumgebungsspezifischen Bildschirmschonerbefehl anweist, den Bildschirm zu sperren, bevor es das obige Skript mit ausführt sudo.

Deaktivieren normaler Zeitpläne

Wenn Sie möchten, dass Cron-Jobsnurzu den geplanten Weckzeiten und nicht während der aktiven Betriebszeit des Computers ausgeführt werden, müssen Sie die vorhandenen Zeitpläne deaktivieren. Unter Ubuntu sind Cron-Jobs in Verzeichnissen organisiert, aber diese Verzeichnisse werden von Jobs auf niedrigerer Ebene in ausgeführt /etc/crontab:

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Sie können sehen, dass die Crontab-Einträge, die tägliche, wöchentliche und monatliche Jobs ausführen, nur ausgeführt werden, wenn Anacron nicht installiert ist (mit der Absicht, dass Anacron andernfalls die Aufgabe der Ausführung übernimmt). Da wir Anacron gerade installiert haben, führt Cron diese Jobs nicht mehr automatisch aus, Anacron jedoch schon, was wir deaktivieren müssen.

Anacron selbst ist ebenfalls eine geplante Aufgabe, die von systemd ausgelöst wird. Um sie zu deaktivieren, geben Sie Folgendes ein:

sudo systemctl mask --now anacron.service
sudo systemctl mask --now anacron.timer

Statt mask, disablekönnte auch genügen, ich habe im Internet widersprüchliche Informationen dazu gefunden, abermask MaiHelfen Sie dabei, zu verhindern, dass die deaktivierten Elemente bei einem Paket-Upgrade wieder aktiviert werden.

Sobald dies erledigt ist, werden die täglichen, wöchentlichen und monatlichen Cron-Jobs nicht mehr während der normalen Betriebszeit des Computers ausgeführt, sondern nur durch das oben bereitgestellte Suspend-Skript und nur nach geplanten Weckzeiten.

verwandte Informationen