Eseguire MySQL Query dopo wget finisce il download del file
Domanda
Ho bisogno di eseguire una query mysql specifica su wget, che è in esecuzione in background, finiture download di un file. Per esempio ...
quindi eseguire:
UPDATE
table
SETstatus
= 'live' DOVEid
= '1234'
Come potrei fare per fare questo?
Soluzione
mi sento di raccomandare lanciando il comando wget in una subshell modo da poter garantire che completa prima di eseguire il vostro comando mysql. In bash, questo è fatto con parentesi.
Anche utilizzare &&
in modo che il comando mysql funziona solo se il comando wget ha uno status di successo di uscita.
#!/bin/sh
(
wget "http://domain/file.zip" && mysql -u user -ppassword database -e "UPDATE..."
) &
Mettere la password in chiaro nello script è non necessariamente una buona idea perché può essere visualizzato in un elenco ps
.
Al contrario, si può fare affidamento sulla sezione [client]
nel file ~/.my.cnf
. È inoltre possibile utilizzare la variabile d'ambiente MYSQL_PWD
. Una di queste soluzioni significa che c'è alcuna password visibile nella lista dei comandi.
Altri suggerimenti
wget http://domain/file.zip && mysql -u user -ppassword database -e "UPDATE table SET status = 'live' WHERE id = '1234'"
In bash sarebbe probabilmente essere semplice come:
#!/bin/bash
wget -q http://domain.tld/file.zip || exit 0
/usr/bin/php somefile.php
Con il file .php contenente la query MySQL.
È anche possibile eseguire l'istruzione MySQL diretta tramite il client di MySQL (che è già stato inviato), ma si deve essere cauti di avere la password di MySQL nel vostro syslog / storia.
Bene, si può solo metterlo in uno script di shell.
Non so enlough su Shell per dirvi come se
Perché non usare file_get_contents
o curl
per scaricare il file dall'interno 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'");
È possibile creare script in Python così ...
#!/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'")
Questo richiede l'URL di origine come primo argomento e il nome del file di destinazione come il secondo. Faccio notare questo utilizza Pythons proprio recupero URL biblioteca urllib, se per qualsiasi motivo è necessario utilizzare wget specificamente si potrebbe importare il modulo 'os' e utilizzare os.system ( 'la linea di comando').
In UNIX è possibile eseguire lo script in background digitando 'python scriptname.py &'