[LINUX] Ich möchte systemd nach Zeitzone verwalten! !!

Ja Ja Ja Ja, alle Hallo, das ist ○○. Ja, Youtube wird sich während der Selbstbeherrschungsphase verbessern. Vielen Dank für all die interessanten Videos.

Es geht darum, wie man den Daemon nur in einer bestimmten Zeitzone mit systemd startet. Es scheint, dass es eine unerwartete Nachfrage gibt, aber ich konnte keinen verwandten Artikel finden, deshalb werde ich Versuch und Irrtum als Memorandum aufschreiben.

Was du machen willst

Ich möchte den Dämon (im Folgenden als Mr.daemon, Mr. Daemon bezeichnet) nur zwischen 8:00 und 23:00 Uhr starten. Ich möchte andere Male anhalten, um den Stromverbrauch zu senken. Übrigens, der Daemon, den ich betreiben möchte, ist mein eigener und überträgt während des Starts weiterhin Audio mit HLS mit ffmpeg. Abgesehen davon, als ich untersuchte, was zwischen dem Dienst und dem Dämon unterschiedlich ist, scheint es, dass beide residente Programme sind, der Dienst im Windows-System verwendet wird und der Dämon im Unix-System verwendet wird.

Die erste Methode, die ich mir ausgedacht habe

Ich werde später über die Probleme schreiben, aber vorerst.

Anlaufen

Ich denke, es gibt zwei Möglichkeiten, Daemon mit systemd zu starten.

Mit diesen Methoden können Sie jedoch die Zeit nicht angeben. Beim automatischen Start wird immer ohne Fragen gestartet, und es versteht sich von selbst, dass ein manueller Start erforderlich ist. Daher denke ich, dass die folgende Methode verwendet werden kann, um die Zeit anzugeben.

systemd Timer

Sie können Daemon zu einem bestimmten Zeitpunkt starten, indem Sie die Timer-Funktion von systemd verwenden.

bash:{Mr.daemon}.timer


[Unit]
#Beliebige Beschreibung
Description=Run {Mr.daemon}.service

[Timer]
#Zeit, die Sie beginnen möchten
OnCalendar=*-*-* 8:00:00 #year-month-date hour:minute:second
#Wenn das Betriebssystem zu dem von OnCalender angegebenen Zeitpunkt in den Ruhezustand versetzt wird, wird der Dämon beim nächsten Start gestartet.
Persistent=true 

[Install]
WantedBy=timers.target

Aktivieren Sie nach dem Schreiben der Unit-Datei den Timer mit sudo systemctl enable {Mr.daemon} .timer.

Administratorrechte cron

Sie können dasselbe mit dem Administrator-privilegierten "cron" tun, indem Sie "systemctl start" zu einem bestimmten Zeitpunkt ausführen.

  1. sudo crontab -e
  2. Fügen Sie rechts 0 8 * * * systemctl start {Mr.daemon} hinzu

Halt

Es scheint, dass der Systemd-Timer starten, aber nicht stoppen kann. Verwenden Sie also trotzdem "cron", um es zu stoppen. Sie können dem cron mit Administratorrechten Folgendes hinzufügen.

0 23 * * * systemctl stop {Mr.daemon}

Probleme mit der obigen Methode

Nun, als ich es mit der obigen Methode implementiert habe, gab es einige Unannehmlichkeiten. Das heißt, der Dämon wird nach dem Neustart zwischen 8:00 und 23:00 Uhr nicht gestartet. Natürlich sind nur die Start- und Endauslöser festgelegt. Wenn Sie also beispielsweise zur Wartung um 9 Uhr neu starten, bleibt Daemon bis 8 Uhr am nächsten Tag eingeschlafen, sofern Sie ihn nicht manuell starten. Dies reicht für einen Daemon nicht aus, der nur zu bestimmten Zeiten ausgeführt wird.

Was sollen wir dann tun?

Ich habe mich entschlossen, mit dem Daemon-Startskript herumzuspielen.

stream.sh


###Postscript-Teil
NOW=`date +%H` #Aktuelle Zeit abrufen
if [ $NOW -ge 23 -o $NOW -lt 8 ]; then #Die aktuelle Zeit ist 23:00 Uhr~Wenn es am nächsten Tag zwischen 8 Uhr ist
    systemctl stop {Mr.daemon} #Stoppen Sie den Daemon
    exit 0 #Erfolgreiche Fertigstellung
fi
###

function fork() {
    #wird bearbeitet
}
fork > /dev/null 2>&1 </dev/null &
echo $! > /run/{Mr.daemon}.pid

Wenn dieses Skript im Postscript-Teil am nächsten Tag zwischen 23:00 und 8:00 Uhr ausgeführt wird, wird der Prozess beendet. Stellen Sie in diesem Zustand "sudo systemctl enable {Mr.daemon}" so ein, dass es immer automatisch startet. Es startet automatisch zwischen 8:00 und 23:00 Uhr, aber Daemon schläft weiter, da der automatische Start am nächsten Tag zwischen 23:00 und 8:00 Uhr abgebrochen wird. Wenn Sie den zuerst getesteten systemd-Timer mit dem cron kombinieren, der den Daemon stoppt, wird Daemon zu einem bestimmten Zeitpunkt ausgeführt.

Kommentar

Anfangs gab es nur "exit" in "if", aber in diesem Zustand wurde ein Fehler ausgegeben, als der Start fehlschlug. Es war das gleiche, auch wenn ich ein normales Ende als "exit 0" zurückgegeben habe. Bis dahin gab es kein Problem, aber ich fühlte mich unwohl. Als ich "systemctl stop {Mr.daemon}" schrieb, wurde dies als Startabbruch behandelt und es trat kein Fehler auf.

In cron?

Ich habe es nicht ausprobiert, aber wenn Sie nicht mit dem Daemon-Startskript herumspielen, können Sie dasselbe mit cron tun.

@reboot if [ $NOW -lt 23 -a $NOW -ge 8 ]; then systemctl start {Mr.daemon}; fi

Wenn Sie es auf diese Weise zur Administratorberechtigung "cron" hinzufügen, wird Daemon auch gestartet, wenn das Betriebssystem zwischen 23:00 und 8:00 Uhr gestartet wird. Ich bin der Meinung, dass "cron" intelligenter ist, weil es nicht verschwenderisch startet, aber es war mühsam, die Reihenfolge in Bezug auf "systemd" wie "After" und Abhängigkeiten anzupassen. Deshalb habe ich beschlossen, es automatisch mit "systemd" zu starten. tat.

Schließlich

Keine dieser Methoden scheint klug zu sein. Wenn also jemand eine gute Methode kennt, lehre mich bitte.

Recommended Posts

Ich möchte systemd nach Zeitzone verwalten! !!
Ich möchte systemd grob verstehen
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 1/3
Ich möchte jedes Mal, wenn ich sudo bin, von einem hübschen Mädchen verflucht werden! !!
Ich möchte die Produkte verkaufen, die ich durch Python Scraping Mercari aufgelistet habe
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 2/3
Ich möchte SUDOKU lösen
Ich möchte die von LINE an S3 gesendeten Fotos speichern
[Los] Ich möchte Endpunkte durch Lesen / Schreiben in die Datenbank trennen
Ich möchte eine ISO-8601-Zeichenfolge in japanische Zeit konvertieren
Ich möchte, dass Sphinx bequem ist und von allen benutzt wird
Ich möchte vorerst eine Docker-Datei erstellen.
Ich möchte Bilder kratzen und trainieren
Ich möchte ○○ mit Pandas machen
Ich möchte Yolos Anmerkung kopieren
Ich möchte mit Python debuggen
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Vorerst möchte ich jede Datei mit ffmpeg konvertieren !!
Ich möchte Spyder an die Taskleiste anheften
Ich möchte Objekte mit OpenCV erkennen
Ich möchte kühl auf die Konsole ausgeben
Ich möchte in der Einschlussnotation drucken
Ich möchte die Verarbeitung zwischen Testzeit und Produktionsumgebung trennen
Ich möchte mit dem Reim Teil1 umgehen
Stellen Sie die Zeitzone auf japanische Standardzeit ein
Ich möchte wissen, wie LINUX funktioniert!
Ich möchte einen Blog mit Jupyter Notebook schreiben
Ich möchte mit dem Reim part3 umgehen
Ich möchte ein Glas aus Python verwenden
Ich möchte eine Python-Umgebung erstellen
Ich möchte Linux auf dem Mac verwenden
Ich möchte eine Pip-Installation mit PythonAnywhere durchführen
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Zeitzone
Ich möchte IPython Qt Console verwenden
Ich möchte den Fortschrittsbalken anzeigen
[Google Colab] Ich möchte mehrere Bilder nebeneinander in einer Kachel anzeigen
Ich möchte ein Automatisierungsprogramm erstellen!
Ich möchte Matplotlib in PySimpleGUI einbetten
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
[Frage] Ich möchte eine Zeichenkette kratzen, die von eindeutigen Tags umgeben ist!
Ich möchte mit dem Reim part2 umgehen
Ich möchte Android-Apps auf Android entwickeln
Ich möchte, dass CAPTCHA HIWAI-Wörter sagt
Ich möchte mit dem Reim part5 umgehen
Ich möchte mit dem Reim part4 umgehen
Ich möchte gleichzeitig einen Musik-Player erstellen und Musik ablegen
Ich möchte die Ergebnisse von% time, %% time usw. in einem Objekt (Variable) speichern.
Ich möchte maschinelles Lernen auch ohne Server durchführen - Time Series Edition -
Ich möchte Matplotlib zu einem dunklen Thema machen
Ich möchte aus verschiedenen Sprachen eine Verbindung zu PostgreSQL herstellen
Ich habe versucht, die Blasensortierung nach Sprache zu programmieren
Ich möchte Dunnetts Test in Python machen
Ich möchte an eine Wiederholung denken können
Ich möchte einfach ein Rauschmodell erstellen
Ich möchte MATLAB feval mit Python verwenden
Ich möchte Datetime.now in Djangos Test reparieren
Ich möchte einen DataFrame in MSSQL einfügen