Exécutez MySQL Query après wget termine le téléchargement de fichiers
Question
Je dois exécuter une requête MySQL spécifique sur wget, qui est en cours d'exécution en arrière-plan, la fin du téléchargement d'un fichier. Par exemple ...
puis exécutez:
Mise à jour
table
SETstatus
= 'live' OÙid
= '1234'
Comment dois-je prendre?
La solution
Je recommande le lancement de la commande wget dans un sous-shell afin de vous assurer qu'il complète avant d'exécuter votre commande mysql. En bash, cela se fait avec des parenthèses.
Utilisez également &&
pour que la commande MySQL ne fonctionne que si la commande wget a un statut de sortie de succès.
#!/bin/sh
(
wget "http://domain/file.zip" && mysql -u user -ppassword database -e "UPDATE..."
) &
Mettre le mot de passe en texte clair dans le script est pas nécessairement une bonne idée car il peut être vu dans une liste de ps
.
Au lieu de cela, vous pouvez compter sur la section [client]
dans votre fichier ~/.my.cnf
. Vous pouvez également utiliser la variable d'environnement MYSQL_PWD
. Chacune de ces solutions signifie qu'il n'y a aucun mot de passe visible dans la liste de commande.
Autres conseils
wget http://domain/file.zip && mysql -u user -ppassword database -e "UPDATE table SET status = 'live' WHERE id = '1234'"
bash il serait probablement aussi simple que:
#!/bin/bash
wget -q http://domain.tld/file.zip || exit 0
/usr/bin/php somefile.php
Avec le fichier .php contenant votre requête MySQL.
Vous pouvez également exécuter l'instruction MySQL directe via le client MySQL (qui a déjà été affiché), mais il faut se méfier d'avoir votre mot de passe MySQL dans votre syslog / histoire.
Eh bien, vous pouvez simplement le mettre dans un script shell.
Je ne sais pas enlough sur Shell pour vous dire comment si
Pourquoi ne pas utiliser file_get_contents
ou curl
pour télécharger le fichier à partir de PHP?
$data = file_get_contents('http://domain/file.zip');
file_put_contents('file.zip', $data);
mysql_query("UPDATE table SET status = 'live' WHERE id = '1234'");
script peut en Python ainsi ...
#!/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'")
Cela prend l'URL source comme premier argument et le nom du fichier de destination en tant que deuxième. Ne notez utilise cette Pythons bibliothèque recherche d'URL urllib, si pour une raison quelconque, vous devez utiliser wget Plus précisément, vous vous pouvez importer le module « os » et utiliser os.system (votre ligne de commande).
Dans unix vous pouvez exécuter le script en arrière-plan en tapant 'python scriptname.py &'