Führen Sie MySQL Query nach wget beendet Download-Datei
Frage
Ich brauche eine bestimmte mysql query auf wget auszuführen, die im Hintergrund ausgeführt wird, eine Datei der Download abgeschlossen ist. Zum Beispiel ...
dann laufen:
UPDATE
table
SETstatus
= 'live' WHEREid
= '1234'
Wie würde ich mich über das Tun dies?
Lösung
Ich würde empfehlen, den wget-Befehl in einer Subshell starten, so dass Sie sicherstellen können, es abgeschlossen ist, bevor Sie Ihren mysql-Befehl ausführen. In bash wird dieser mit Klammern getan.
Auch &&
verwenden, so dass der MySQL-Befehl wird nur ausgeführt, wenn der Befehl wget einen Erfolg Exit-Status hat.
#!/bin/sh
(
wget "http://domain/file.zip" && mysql -u user -ppassword database -e "UPDATE..."
) &
Setzen Sie das Passwort im Klartext in dem Skript ist nicht unbedingt eine gute Idee , weil es in einem ps
Eintrag angezeigt werden kann.
Sie können stattdessen auf dem [client]
Abschnitt in Ihrer ~/.my.cnf
Datei verlassen. Sie können auch die MYSQL_PWD
Umgebungsvariable verwenden. Jede dieser Lösungen bedeutet, dass es kein Passwort sichtbar in der Befehlsliste.
Andere Tipps
wget http://domain/file.zip && mysql -u user -ppassword database -e "UPDATE table SET status = 'live' WHERE id = '1234'"
In der bash wäre es wahrscheinlich so einfach sein wie:
#!/bin/bash
wget -q http://domain.tld/file.zip || exit 0
/usr/bin/php somefile.php
Mit der Php-Datei MySQL-Abfrage enthält.
Sie können auch die MySQL-Anweisung direkt über das MySQL-Client ausführen (das ist bereits gebucht), aber Sie sollten sich mit Ihrem MySQL-Kennwort in der syslog / Geschichte vorsichtig sein.
Nun, könnte man es nur in einem Shell-Skript setzen.
Ich weiß nicht, über Shell enlough Ihnen sagen, wie wenn
Warum nicht file_get_contents
oder curl
verwenden, um die Datei in PHP herunterladen?
$data = file_get_contents('http://domain/file.zip');
file_put_contents('file.zip', $data);
mysql_query("UPDATE table SET status = 'live' WHERE id = '1234'");
Sie können Skript es in Python so ...
#!/usr/bin/python
import sys, MySQLdb, urllib
urllib.urlretrieve(sys.argv[1], sys.argv[2])
db = MySQLdb.connect(host="localhost", user="username", passwd="password", db="database")
cursor = db.cursor()
cursor.execute("UPDATE table SET status = 'live' WHERE id = '1234'")
Dies ist der Quell-URL als erstes Argument und dem Zieldateinamen wie die zweite. Sie weisen diese Pythons eigene URL abrufen Bibliothek urllib verwendet, wenn aus irgendeinem Grund Sie wget verwenden müssen speziell Sie könnten Sie die ‚os‘ Modul importieren und verwenden os.system ( ‚Befehlszeile‘).
In Unix können Sie das Skript im Hintergrund laufen, die von 'Python scriptname.py &' eingeben