SSH Tunnel zum MySQL Server

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
rpi-joe
User
Beiträge: 23
Registriert: Mittwoch 27. Januar 2021, 15:27

@__deets__: Genau das habe ich auch überlegt, als ich die Tipps von Sirius las. Der Dreh kommt aus der Vorversion mit Zahlenerkennung des Zählwerks. Da waren mehrere cv2 Funktionen und tesseract drin.
Das Bild bräuchte gar nicht mehr gedreht werden. Es reicht, die Koordinaten des ROI zu spiegeln :-)
Info zu dem Modul wäre toll. Wo gibts ein deutsches Tutorial?

Auch das keyboard Modul war aus der Anfangsphase, versuch, das Programm geordnet zu beenden.
mean_blue wird gar nicht verwendet.
Es müssen nicht alle drei Farben (RGB) verarbeitet werden? ok.
Ein `else: pass` kann einfach weg.
Ist von PyCharm reingekommen,ok.
Niemals Werte in eine SQL-Statement hineinformatieren, dafür gibt es Parameter.
Welche Zeile ist gemeint? Das möchte ich verstehen.

Die anderen Punkte hab ich auch verinnerlicht.

Hab noch das my vor den restlichen Aufrufen mycursor, mydb entfernt :-) jetzt läufts auf dem rpi.

Auf der Suche nach Infos bleibe ich oft in Foren wie Stackoverflow hängen. Nach 5 langen Threads brauche ich eine Pause.
Irgendwann gibt man dann auf, wenn die Infos aus 2005- 2015 sind, die nicht mehr aktuell sind :-(

Um so professionell wie ihr zu werden, braucht es viel Übung - bin neidisch ;-)

Auf dem rpi wird das Programm aus der /etc/rc.local gestartet. Da habe ich parallel hier gestöbert und das Für und Wider für einen Systemd gelesen und das rc.local veraltet sei. Soll ich das noch ändern?

Und vielen Dank für eure Hilfe.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

… /etc/rc.local gestartet …
Nebenbemerkung dazu: rc.local wird zwar oft erwähnt, ist aber eigentlich schon lange deprecated und sollte nicht mehr verwendet werden. Dienste, die automatisch starten sollen, startet man auf systemd-basierten Systemen heute über eine Service-Unit. Einige Distros unterstützen das gar nicht mehr, andere verwenden einen Wrapper, der das im Hintergrund auf Systemd umbiegt.
rpi-joe
User
Beiträge: 23
Registriert: Mittwoch 27. Januar 2021, 15:27

@nezzcarth: Hab ich mir gedacht. Habe einen Vorschlag entdeckt, weiss nur nicht ob auch ein Python-Programm damit gestartet werden kann:

Code: Alles auswählen

[Unit]
Description=CounterWater
After=multi-user.target
 
[Service]
ExecStart=/home/pi/counter/Red_Indicator5Forum.py &
 
[Install]
WantedBy=multi-user.target
Original war eine Shell drin in der Zeile

Code: Alles auswählen

ExecStart=/home/pi/counter/ XXXXX.sh &
Kann da mein Python stehen bleiben?

Das dann nach /lib/systemd/system/counter.service speichern und ausführbar machen.
Dann mit

Code: Alles auswählen

sudo systemctl enable counter
autostarten - fertig.?

P.S. wir sind schon lange am Thema vorbei, ist das ok so oder sollen wir ein neues Thema aufmachen?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das geht auch mit Python. Dazu einen shebang angeben, und das Skript ausführbar machen. Oder explizit zb /usr/bin/python /voller/pfad/zum/skript.py abgeben. Das & ist IMHO überflüssig.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich frage mich ob das nicht nur überflüssig ist sondern vielleicht sogar ein Problem wenn man den Dienst beispielsweise wieder stoppen möchte.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
rpi-joe
User
Beiträge: 23
Registriert: Mittwoch 27. Januar 2021, 15:27

Also ich schreibe die Datei: /lib/systemd/system/counter.service
Inhalt:

Code: Alles auswählen

#!/usr/bin/env python3

[Unit]
Description=CounterWater
After=multi-user.target
 
[Service]
ExecStart=/home/pi/counter/Red_Indicator5Forum.py
 
[Install]
WantedBy=multi-user.target
und ausführbar machen. Danach noch autostarten mit: sudo systemctl enable counter

Oder muss das aufzurufende Pythonprogramm #!/usr/bin/env python3 am Anfang haben?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja. Nennt sich shebang. Und das x-bit muss gesetzt sein. Wenn du das Skript genau so wie in der Unit aufgerufen bekommst, ist das schon mal gut.
rpi-joe
User
Beiträge: 23
Registriert: Mittwoch 27. Januar 2021, 15:27

@__deets__: Der Start über einen service hat bis jetzt nicht funktioniert, hatte es kurz ausprobiert. Habe noch ein anderes Problem, meine MySQL war heute morgen nicht mehr erreichbar und der rpi hat das Programm beendet :-( Jetzt aktiviere ich erstmal wieder den rc.local Eintrag....
rpi-joe
User
Beiträge: 23
Registriert: Mittwoch 27. Januar 2021, 15:27

Das Thema systemd ist nicht so einfach, merke ich heute nachmittag.
Nach einigen Versuchen (trial and error) habe ich einen SymLink hinbekommen, der tut jedoch nichts.

Code: Alles auswählen

pi@rpizeroCamera:/lib/systemd/system $ sudo systemctl enable counter
Created symlink /etc/systemd/system/multi-user.target.wants/counter.service → /lib/systemd/system/counter.service.
Jetzt muß ich mal nachlesen, wie der Ablauf ist. Ob ich erst etwas löschen muss um weiter zu machen
und wie der Ablauf beim Anlegen auf dem rpi sein muss.

Die Datenbank läuft wieder, hatte den Server neu gestartet, da etliche Tasks mit MySQL offen waren.
Ist bestimmt von den Versuchen der ssh-Geschichte und meinem fehlerhaften Programm gekommen, das jedes Mal eine neue Verbindung aufgebaut hat aber nicht geschlossen hat.
rpi-joe
User
Beiträge: 23
Registriert: Mittwoch 27. Januar 2021, 15:27

Eine gute Nachricht, ich habe den systemd zum Laufen bekommen :D
Hier ist meine Vorgehensweise für die, die auch das erste Mal einen service anlegen wollen oder müssen:


Ziel: Automatischer Programmstart beim booten mit neuer systemd -Funktion !

systemd-service-Datei counter.service anlegen in /lib/systemd/system
kein ausführbar! chmod -x !
nur lesen chmod 444 !
Eigentümer: root:root !

sieht dann so aus.
-r--r--r-- 1 root root 688 Feb 04 11:18 counter.service


Inhalt von counter.service
_______________________________________
[Unit]
Description= Wasserzaehler
After=multi-user.target

[Service]
ExecStart=/home/pi/counter/water.py

[Install]
WantedBy=multi-user.target
______________________________________

Description dient als Info, freie Eingabe
ExecStart ist /Pfad/Name des Programms


Python-Programm fertig! Endung .py
shebang 1.Zeile > #!/usr/bin/env python3 eingeben
Rechte hatte ich auf root:root gesetzt
Ausführbar mit > sudo chmod +x Dateiname.py


mit dem systemctl-Befehl enable den service anlegen:

pi@rpizeroCamera:/lib/systemd/system $ sudo systemctl enable counter

Antwort:
Created symlink /etc/systemd/system/multi-user.target.wants/counter.service → /lib/systemd/system/counter.service.


rpi neu starten:

pi@rpizeroCamera:/lib/systemd/system $ sudo reboot now
pi@rpizeroCamera:/lib/systemd/system $ Connection to 192.168.1.149 closed by remote host.
Connection to 192.168.1.149 closed.

F E R T I G

--------------------------------------------

wie stoppe ich den systemd service wieder?
mit: sudo service counter stop

Hinweis: rpi nimmt an, dass ein .service gemeint ist also > counter.service

Wenn der counter.service gestoppt ist, kann die Programm-Datei, z.B. /home/pi/rpi/water.py geändert werden,
es wird bei Neustart des service neu geladen. Damit kann man Änderungen ohne Probleme einbringen.

starten: sudo systemctl counter start

Status abfragen: sudo systemctl counter status

(Wie immer ohne Gewehr - ich übernehme keine Verantwortung für instabile Systeme)
Antworten