Pergunta

Eu preciso executar uma consulta específica mysql sobre wget, que é executado em segundo plano, terminar o download de um arquivo. Por exemplo ...

http: //domain/file.zip

, em seguida, execute:

Atualização table SET status = 'ao vivo' WHERE id = '1234'

Como eu iria fazer isso?

Foi útil?

Solução

Eu recomendaria lançando o comando wget em um subshell assim você pode garantir que ela seja concluída antes de executar o comando mysql. Em bash, isso é feito com parênteses.

Além disso, use && para que o comando mysql é executado somente se o comando wget tem um status de sucesso de saída.

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

Colocar a senha em texto simples no script é não necessariamente uma boa idéia porque ele pode ser visto em um ps listagem.

Em vez disso, você pode contar com a seção [client] em seu arquivo ~/.my.cnf. Você também pode usar a variável de ambiente MYSQL_PWD. Qualquer um destes meios soluções não há nenhuma senha visível no comando listagem.

Outras dicas

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

No bash, provavelmente, seria tão simples como:

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

Com o arquivo .php contendo sua consulta MySQL.

Você também pode executar a instrução MySQL direta via o cliente MySQL (que já foi publicado), mas você deve ser cuidadoso de ter sua senha MySQL em seu syslog / história.

Bem, você pode simplesmente colocá-lo em um shell script.

Eu não sei enlough sobre Shell para lhe dizer como embora

Por que não usar file_get_contents ou curl para baixar o arquivo de dentro do 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'");

Você pode escrevê-lo em Python assim ...

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

Isso leva o URL de origem como um primeiro argumento e o nome do arquivo de destino como o segundo. Anote isso usa Pythons própria urllib URL recuperação de biblioteca, se por qualquer motivo você tem que usar wget especificamente você poderá importar o 'os' módulo e o uso os.system ( 'sua linha de comando').

Em unix você pode executar o script em segundo plano digitando 'python scriptname.py &'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top