[LINUX] Je veux gérer systemd par fuseau horaire! !!

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.

Chose que tu veux faire

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.

La première méthode que j'ai trouvée

J'écrirai plus tard sur les problèmes, mais pour le moment.

Commencez

Je pense qu'il y a deux manières principales de démarrer Daemon en utilisant systemd.

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.

Minuterie 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.

Privilèges d'administrateur cron

Vous pouvez faire de même avec cron privilégié par l'administrateur en exécutant systemctl start à une heure spécifiée.

  1. sudo crontab -e
  2. Ajoutez à droite 0 8 * * * systemctl start {Mr.daemon}

Arrêtez

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}

Problèmes avec la méthode ci-dessus

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.

Alors que devons-nous faire

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.

Commentaire

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.

Dans 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.

finalement

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

Je veux gérer systemd par fuseau horaire! !!
Je veux comprendre à peu près systemd
[Python] Je veux gérer 7DaysToDie depuis Discord! 1/3
Je veux être maudit par une jolie fille à chaque fois que je sudo! !!
Je souhaite vendre les produits que j'ai listés par python scraping Mercari
[Python] Je veux gérer 7DaysToDie depuis Discord! 2/3
Je veux résoudre SUDOKU
Je souhaite enregistrer les photos envoyées par LINE vers S3
[Go] Je souhaite séparer les points de terminaison en lisant / en écrivant dans la base de données
Je souhaite convertir une chaîne de caractères ISO-8601 en heure japonaise
Je veux que Sphinx soit pratique et utilisé par tout le monde
Je veux créer un Dockerfile pour le moment.
Je veux gratter des images et les former
Je veux faire ○○ avec les Pandas
Je veux copier l'annotation de yolo
Je veux déboguer avec Python
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
Pour le moment, je veux convertir n'importe quel fichier avec ffmpeg !!
Je veux épingler Spyder à la barre des tâches
Je veux détecter des objets avec OpenCV
Je veux sortir froidement sur la console
Je veux imprimer dans la notation d'inclusion
Je souhaite séparer le traitement entre le temps de test et l'environnement de production
Je veux gérer la rime part1
Définir le fuseau horaire sur l'heure standard japonaise
Je veux savoir comment fonctionne LINUX!
Je veux écrire un blog avec Jupyter Notebook
Je veux gérer la rime part3
Je veux utiliser jar de python
Je veux créer un environnement Python
Je veux utiliser Linux sur mac
Je veux installer Python avec PythonAnywhere
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Fuseau horaire
Je souhaite utiliser la console IPython Qt
Je veux afficher la barre de progression
[Google Colab] Je souhaite afficher plusieurs images côte à côte dans une vignette
Je veux faire un programme d'automatisation!
Je veux intégrer Matplotlib dans PySimpleGUI
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
[Question] Je veux gratter une chaîne de caractères entourée de balises uniques!
Je veux gérer la rime part2
Je souhaite développer des applications Android sur Android
Je veux que CAPTCHA dise des mots HIWAI
Je veux gérer la rime part5
Je veux gérer la rime part4
Je veux créer un lecteur de musique et enregistrer de la musique en même temps
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)
Je veux faire du machine learning même sans serveur - Time Series Edition -
Je veux faire de matplotlib un thème sombre
Je souhaite me connecter à PostgreSQL à partir de plusieurs langues
J'ai essayé de programmer la bulle de tri par langue
Je veux faire le test de Dunnett en Python
Je veux pouvoir penser à la récurrence
Je souhaite créer facilement un modèle de bruit
Je veux utiliser MATLAB feval avec python
Je veux corriger Datetime.now dans le test de Django
Je veux INSÉRER un DataFrame dans MSSQL