Pi Zero radio aanvulling 2

Door synoniem op woensdag 10 juni 2020 21:08 - Reacties (5)
Categorie: Raspberry Pi, Views: 3.229

Bij de Pi Zero radio heb ik pydPiper in de Dockercontainer zo ingesteld staan dat als de container stopt gelijk een nieuwe gestart wordt. De Dockercontainer wordt automatisch als een service gestart door het pydpiper.service bestand in systemd op te nemen.

Vanuit het oogpunt van beheer heel gemakkelijk maar wat nu als er sporadisch een fout optreedt zeg 1 a 2 keer per dag? Dan zie je na een week ettelijke gestopte containers want er wordt wel een nieuwe gestart maar de oude wordt niet verwijderd.

Nu zat er in display.py zo'n sporadische fout:
code:
1
2
3
4
5
6
7
8
9
Uncaught exception
Traceback (most recent call last):
  File "/app/pydPiper.py", line 805, in <module>
    img = dc.next()
  File "/app/displays/display.py", line 1556, in next
    w = s.get()
  File "/app/displays/display.py", line 1257, in get
    widget, duration, conditional = self.widgets[self.currentwidget]
IndexError: list index out of range

Zoals de oorspronkelijke auteur in de documentatie aangeeft is het aansturen van het display vrij tijdkritisch. Dat is de waarschijnlijk de reden dat deze fout soms optreedt. En ik heb het opgelost door de exception te onderscheppen en vervolgens gewoon verder te laten lopen. Als iemand hier betere ideeën voor heeft en de code wil aanpassen, graag! Voor nu heb ik mijn nieuwe versie getest en op Github gezet.

Uiteraard wil je ook van de gestopte containers af want de Pi Zero is al geen snelheid- of geheugenmonster en deze ballast kan de boel alleen maar vertragen.

code:
1
2
3
4
$ sudo service pydpiper stop
$ sudo docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Het verwijderen duurt behoorlijk lang maar uiteindelijk zie je de hashcodes van alle verwijderde containers verschijnen en kun je pydpiper service weer starten met
code:
1
sudo service pydpiper start

Volgende: Pi Zero radio aanvulling 3 23-07 Pi Zero radio aanvulling 3
Volgende: Pi Zero radio aanvulling 1 23-04 Pi Zero radio aanvulling 1

Reacties


Door Tweakers user Mattie112, woensdag 10 juni 2020 22:49

Waarom maak je een nieuwe container aan? Als je de flag restart=always toevoegt aan je container dan zal docker gewoon je bestaande container herstarten. (Goed imo is het alsnog beter dit in je applicatie op te vangen Maar Goed)

Door Tweakers user synoniem, woensdag 10 juni 2020 23:48

Mattie112 schreef op woensdag 10 juni 2020 @ 22:49:
Waarom maak je een nieuwe container aan? Als je de flag restart=always toevoegt aan je container dan zal docker gewoon je bestaande container herstarten. (Goed imo is het alsnog beter dit in je applicatie op te vangen Maar Goed)
Ik heb deze constructie niet zelf bedacht maar de gedachte is waarschijnlijk geweest dat op het moment dat docker crasht je wilt dat docker ook herstart wordt. En uiteraard hoort de applicatie niet te crashen maar ja toch gebeurt dat soms. :)

Door Tweakers user himlims_, donderdag 11 juni 2020 10:32

restart=on-failure
restartsec=5s

gewoon bij de .service?

Door Tweakers user synoniem, donderdag 11 juni 2020 12:11

himlims_ schreef op donderdag 11 juni 2020 @ 10:32:
restart=on-failure
restartsec=5s

gewoon bij de .service?
Ja dat is ook een optie. Ik heb me nog niet in systemd verdiept maar er is vast ook een optie om bij een herstart de afgebroken container te verwijderen. En anders is die mogelijkheid in docker zelf er wel. Maar voor degene die nu al die afgebroken containers heeft, leek me dit het beste advies.

Door Tweakers user sander85, vrijdag 12 juni 2020 23:59

Je kan ook nog de optie - - rm mee geven aan het Docker run command. Dat zorgt er voor dat bij een crash de container direct opgeruimd wordt. De logging (container output) kan je eventueel nog in journalctl terugvinden.

Reactie formulier
(verplicht)
(verplicht, maar wordt niet getoond)
(optioneel)