[linux] experimenteer daemon niet meer zo hard nodig

Geert Stappers stappers op stappers.nl
Do Dec 1 18:33:58 CET 2022


On Thu, Dec 01, 2022 at 05:13:21PM +0100, Oscar Roozen via Linux wrote:
> On 01/12/2022 15:25, Geert Stappers via Linux wrote:
> > Met welke daemon voor jij start/stop/reload testjes uit?
> 
> Wat wil je testen? Wil je iets met systemd-afhankelijkheden uitproberen? Wil
> je een installatie-script testen? Dit voelt een beetje als een XY probleem.
 
Ja, het betreft een XY probleem. ( https://xyproblem.info/ )

> Ik heb laatst een daemon geschreven in python. Alles geregeld, dubbel forken
> met het sluiten van IO-sockets. Management van de pid-file. ALle uitvoer via
> logging. Alles werkte helemaal goed. De laatste stap was nog een .service
> bestande maken voor systemd. Toen bleek dat ik veel sneller klaar was
> geweest als ik niet opnieuw het wiel had uitgevonden...
> 
> Systemd kan een willekeurige executable ver-daemon-en. Je hoeft niks te
> forken, dat doet systemd voor je. Output gaat naar syslog. Geef maar aan of
> je een pid-file wil, systemd regelet het allemaal voor je. Allemaal werk
> voor niks geweest, want de target was toch een systemd-wereld.
> 
> Hier is dus een daemon voor je (volledig ongetest, meer voor het idee):
> 
> 
> ---- niks.sh ----
> 
> #!/bin/sh
> 
> n=1
> while sleep 60; do
> 	echo Dit is alweer rondje $n
> 	n=$[n+1]
> done
> 
> 
> ---- niks.service ----
> 
> [Unit]
> Description=Helemaal Niks
> After=sysinit.target
> 
> [Service]
> Type=Simple
> Restart=always
> User=nobody
> ExecStart=/path/naar/niks.sh
> 
> [Install]
> WantedBy=multi-user.target
> 

Dat zie ik wel werken. (Maar ook niet getest)



Nog het oorspronkelijke probleem/uitdaging  en  "oplossing":


   Letsencrypt update het certificaat
   Voor de webserver gaat dat goed
   Voor dovecot niet, die heeft een reload nodig

   Testomgeving heeft geen dovecot.
   Vandaar de behoefte een experimenteer daemon.


   Oplossing is in plaats van "systemctl restart testdaemon"
   gewoon "echo systemctl restart dovecot" te doen.


Voordat het besef van een XY-probleem er was,
was het idee nog om  'hardcoded-systemctl-restart-string' plus
"service-name-as-paramater" te gebruiken. Toen was er ineens het idee
van "hele command line" voor zowel productie als test omgeving.



Groeten
Geert Stappers
-- 
Silence is hard to parse


Meer informatie over de Linux maillijst