Pregunta

necesito para ejecutar una consulta específica sobre MySQL wget, que se ejecuta en segundo plano, acaba de descargar un archivo. Por ejemplo ...

  

http: //domain/file.zip

a continuación, ejecute:

  

ACTUALIZACIÓN table SET status = 'en vivo' DONDE id = '1234'

¿Cómo voy a ir haciendo esto?

¿Fue útil?

Solución

Yo recomendaría lanzar el comando wget en un subnivel para que pueda garantizar que se complete antes de ejecutar el comando de MySQL. En bash, esto se hace con paréntesis.

También utilice && para que el comando mysql ejecuta sólo si el comando wget tiene un código de salida de éxito.

#!/bin/sh
(
  wget "http://domain/file.zip" && mysql -u user -ppassword database -e "UPDATE..."
) &

Poner la contraseña en texto plano en el guión es no necesariamente una buena idea , ya que puede ser vista en un listado de ps.

En su lugar, se puede confiar en la sección de [client] en su archivo ~/.my.cnf. También puede utilizar la variable de entorno MYSQL_PWD. Cualquiera de estas soluciones significa que no hay contraseña visible en la lista de comandos.

Otros consejos

wget http://domain/file.zip && mysql -u user -ppassword database -e "UPDATE table SET status = 'live' WHERE id = '1234'"

En bash que probablemente sería tan simple como:

#!/bin/bash
wget -q http://domain.tld/file.zip || exit 0
/usr/bin/php somefile.php

Con el archivo .php que contiene su consulta MySQL.

También puede ejecutar la instrucción directa de MySQL a través del cliente de MySQL (si ya se han publicado), pero se debe tener cuidado de que su contraseña de MySQL en su syslog / historia.

Bueno, usted podría ponerlo en un script de shell.

No sé enlough sobre Shell para decirle cómo aunque

¿Por qué no usar file_get_contents o curl para descargar el archivo desde 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'");

Se puede crear un script en Python por lo tanto ...

#!/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'")

Esto toma la URL de origen como primer argumento y el nombre del archivo de destino como el segundo. Ten en cuenta este utiliza pitones propia biblioteca urllib recuperación de URL, si por alguna razón usted tiene que utilizar wget específicamente que se podía importar el módulo de 'os' y utilizar os.system ( 'la línea de comandos').

En UNIX puede ejecutar el script en el fondo escribiendo 'pitón scriptname.py &'

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top