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.
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.
Ich werde später über die Probleme schreiben, aber vorerst.
Ich denke, es gibt zwei Möglichkeiten, Daemon mit systemd
zu starten.
systemctl enable {Mr.daemon}
systemctl start {Mr.daemon}
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.
{Mr.daemon} .timer
0 8 * * * systemctl start {Mr.daemon}
systemd
TimerSie 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
.
cron
Sie können dasselbe mit dem Administrator-privilegierten "cron" tun, indem Sie "systemctl start" zu einem bestimmten Zeitpunkt ausführen.
sudo crontab -e
0 8 * * * systemctl start {Mr.daemon}
hinzuEs 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}
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.
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.
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.
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.
Keine dieser Methoden scheint klug zu sein. Wenn also jemand eine gute Methode kennt, lehre mich bitte.
Recommended Posts