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 ...

  

http: //domain/file.zip

puis exécutez:

  

Mise à jour table SET status = 'live' OÙ id = '1234'

Comment dois-je prendre?

Était-ce utile?

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 &'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top