Domanda

Ho bisogno di eseguire una query mysql specifica su wget, che è in esecuzione in background, finiture download di un file. Per esempio ...

  

http: //domain/file.zip

quindi eseguire:

  

UPDATE table SET status = 'live' DOVE id = '1234'

Come potrei fare per fare questo?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top