Oui Oui Oui Oui, tout le monde Bonjour, c'est ○○. Oui, Youtube s'améliorera pendant la période de maîtrise de soi, merci pour toutes les vidéos intéressantes.
Il s'agit de savoir comment démarrer le démon uniquement à un fuseau horaire spécifique en utilisant systemd
.
Il semble qu'il y ait une demande inattendue, mais je n'ai pas pu trouver d'article connexe, alors j'écrirai les essais et erreurs sous forme de mémorandum.
Je veux démarrer le démon (ci-après dénommé Monsieur Démon, Monsieur Démon) uniquement entre 8h00 et 23h00.
Je veux m'arrêter d'autres fois pour réduire la consommation d'énergie.
Au fait, le démon que je veux utiliser est le mien, et il continue de diffuser de l'audio en utilisant HLS avec ffmpeg
au démarrage.
En passant, lorsque j'ai étudié ce qui est différent entre le service et le démon, il semble que les deux sont des programmes résidents, le service est utilisé dans le système Windows et le démon est utilisé dans le système Unix.
J'écrirai plus tard sur les problèmes, mais pour le moment.
Je pense qu'il y a deux manières principales de démarrer Daemon en utilisant systemd
.
systemctl enable {Mr.daemon}
systemctl start {Mr.daemon}
Cependant, vous ne pouvez pas spécifier l'heure avec ces méthodes. Avec le démarrage automatique, il démarre toujours sans aucune question, et il va sans dire qu'un démarrage manuel est nécessaire. Par conséquent, je pense que la méthode suivante peut être utilisée pour spécifier l'heure.
{Mr.daemon} .timer
0 8 * * * systemctl start {Mr.daemon}
systemd
Vous pouvez démarrer Daemon à un moment précis en utilisant la fonction de minuterie de systemd
.
bash:{Mr.daemon}.timer
[Unit]
#Toute description
Description=Run {Mr.daemon}.service
[Timer]
#L'heure à laquelle tu veux commencer
OnCalendar=*-*-* 8:00:00 #year-month-date hour:minute:second
#Si le système d'exploitation est en veille à l'heure spécifiée par OnCalender, le démon sera lancé au prochain démarrage.
Persistent=true
[Install]
WantedBy=timers.target
Après avoir écrit le fichier unité comme ceci, activez le minuteur avec sudo systemctl enable {Mr.daemon} .timer
.
cron
Vous pouvez faire de même avec cron
privilégié par l'administrateur en exécutant systemctl start
à une heure spécifiée.
sudo crontab -e
0 8 * * * systemctl start {Mr.daemon}
Il semble que la minuterie systemd peut démarrer mais ne peut pas s'arrêter.
Alors utilisez quand même cron
pour l'arrêter.
Vous pouvez ajouter ce qui suit au cron
avec des privilèges d'administrateur.
0 23 * * * systemctl stop {Mr.daemon}
Eh bien, lorsque je l'ai implémenté par la méthode ci-dessus, il y avait quelques inconvénients. Autrement dit, le démon ne démarre pas après un redémarrage entre 8h00 et 23h00. Bien sûr, seuls les déclencheurs de début et de fin sont définis, donc si vous redémarrez à 9 heures pour la maintenance, par exemple, Daemon restera endormi jusqu'à 8 heures le lendemain à moins que vous ne le démarriez manuellement. Cela ne suffit pas pour un démon qui ne s'exécute qu'à des moments précis.
J'ai décidé de jouer avec le script de démarrage du démon.
stream.sh
###Partie Postscript
NOW=`date +%H` #Obtenir l'heure actuelle
if [ $NOW -ge 23 -o $NOW -lt 8 ]; then #Il est actuellement 23:00~Si c'est entre 8 heures le lendemain
systemctl stop {Mr.daemon} #Arrêtez le démon
exit 0 #Réussite
fi
###
function fork() {
#En traitement
}
fork > /dev/null 2>&1 </dev/null &
echo $! > /run/{Mr.daemon}.pid
Dans la partie PostScript, si ce script s'exécute entre 23h00 et 8h00 le lendemain, il quittera le processus.
Dans cet état, définissez sudo systemctl enable {Mr.daemon}
pour toujours démarrer automatiquement.
Il démarre automatiquement entre 8h00 et 23h00, mais Daemon reste endormi car le démarrage automatique est annulé entre 23h00 et 8h00 le lendemain.
Si vous combinez le minuteur systemd
que vous avez essayé en premier avec le cron
qui arrête le démon, vous aurez Daemon en cours d'exécution à un moment précis.
Au départ, il n'y avait que ʻexit dans ʻif
, mais dans cet état, une erreur a été générée lorsque le démarrage a échoué.
C'était la même chose même si je retournais une fin normale comme ʻexit 0. C'était jusque-là qu'il n'y avait pas de problème, mais je me sentais mal à l'aise, donc quand j'ai écrit
systemctl stop {Mr.daemon}`, cela a été traité comme une annulation de démarrage et aucune erreur ne s'est produite.
cron
?Je ne l'ai pas essayé, mais si vous ne jouez pas avec le script de démarrage du démon, vous pouvez faire la même chose avec cron
.
@reboot if [ $NOW -lt 23 -a $NOW -ge 8 ]; then systemctl start {Mr.daemon}; fi
Si vous l'ajoutez à l'autorité d'administrateur cron
de cette manière, Daemon démarrera également lorsque le système d'exploitation démarrera entre 23h00 et 8h00.
Je pense que cron
est plus intelligent car il ne démarre pas sans gaspillage, mais il était difficile d'ajuster l'ordre lié à systemd
tel que ʻAfter et les dépendances, alors j'ai décidé de le démarrer automatiquement avec
systemd`. fait.
Aucune de ces méthodes ne semble intelligente, donc si quelqu'un connaît une bonne méthode, apprenez-moi s'il vous plaît.
Recommended Posts