Raspbian / rc.local / kein Zugriff auf die mySQL-Datenbank

dieterz1

Ensign
Registriert
Jan. 2014
Beiträge
245
Hallo,
ich möchte beim Systemstart ein Python-Script (liegt im home-Verzeichnis) automatisch ausführen lassen, welches u.a. auch diverse Werte in eine mySQL-DB (MariaDB) speichert.
Führe ich das Script manuell aus, funktioniert alles.
Lasse ich das Script über rc.local automatisch ausführen, so werden keine Datenbankeinträge erzeugt.
Der Befehl "systemctl status rc.local" sagt mir:

"pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)")"

Damit der mySQL-Zugriff auch per Remote-Abfrage möglich ist, habe ich die Datei "/etc/mysql/mariadb.conf.d/50-server.cnf" bereits angepasst.

Vorher: bind-address = 127.0.0.1
Aktuell: bind-address = 0.0.0.0

Der Remote-Zugriff funktioniert grundsätzlich, wenn ich z.B. mittels mySQL-Client (an einem Windows-PC) DB-Abfragen mache.

Warum zum Teufel funktioniert der Datenbankzugriff über rc.local nicht?

Ich habe schon vieles probiert, komme aber einfach nicht weiter. ichBinVerzweifelt

Mittels Google bin ich u.a. auch auf diesen Artikel gestoßen:
https://serverfault.com/questions/8...5-28000-when-running-script-from-etc-rc-local

Zitat:
$HOME isn't set in the environment that /etc/rc.local runs in so mysql won't find the user's .my.cnf file.
You could fix this by either explicitly setting $HOME before running your command ...

export HOME=/root

Or explicitly set the config file to use with --defaults-file=/root/.my.cnf
Ich verstehe die Aussage nicht wirklich, bzw. weiß auch nicht ob diese Beschreibung überhaupt mein Problem lösen würde.

Wer kann mir helfen?
 
vermutlich ist der mysql server einfach noch nicht komplett gestartet wenn dein rc.local script beim starten ausgeführt wird. so ein raspi ist ja auch nicht der schnellste. ein billiger test wäre ein "sleep 30" am anfang der rc.local - sollte das helfen, könnte man das so umstellen, dass nicht eine feste zeit gewartet wird sondern auf verfügbarkeit des service geprüft wird.

"bind-address = 0.0.0.0" mag im heimnetz noch ok sein, für alles andere würde ich davon abraten.
 
Es funktioniert!
Die Welt kann manchmal so einfach sein.
Hätte ich gleich hier gefragt, hätte ich mir viel Zeit und Ärger erspart.
Danke, 0x8100!

Ich habe den Sleep-Befehl nun im Python-Script eingebaut (vor dem mySQL-Connect-Befehl).
Wartezeit "60 Sekunden" sollte definitiv reichen.
 
das ist die quick&dirty lösung. besser wäre es wie von @foofoobar beschrieben zu machen.
 
  • Gefällt mir
Reaktionen: Marflowah
Genau. Es ist schon eleganter, den Befehl dann auszuführen, wenn er möglich ist. Systemd bietet sowas ja.
 
0x8100 schrieb:
das ist die quick&dirty lösung. besser wäre es wie von @foofoobar beschrieben zu machen.
Ich sehe mich als Linux-Anfänger, von daher weiß ich leider nicht, in welche Dateien welche Codezeilen eingefügt werden müssten, um genau diese Abhängigkeit zwischen meinem Python-Script und dem mysql-Dienst herzustellen.
 
Zurück
Oben