Запустите MySQL Query после того, как wget завершит загрузку файла - PullRequest
1 голос
/ 20 мая 2009

Мне нужно выполнить определенный запрос mysql на wget, который работает в фоновом режиме и заканчивает загрузку файла. Например ...

wget http://domain/file.zip

затем запустите:

ОБНОВЛЕНИЕ table УСТАНОВИТЬ status = 'live' ГДЕ id = '1234'

Как бы я поступил так?

Ответы [ 6 ]

3 голосов
/ 20 мая 2009

Я бы порекомендовал запустить команду wget в подоболочке, чтобы вы могли убедиться, что она завершится, прежде чем вы запустите команду mysql. В bash это делается с помощью скобок.

Также используйте &&, чтобы команда mysql выполнялась только в том случае, если команда wget имеет статус успешного завершения.

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

Поместить пароль в текстовом виде в сценарии не обязательно хорошая идея , поскольку его можно просмотреть в списке ps.

Вместо этого вы можете положиться на раздел [client] в файле ~/.my.cnf. Вы также можете использовать переменную окружения MYSQL_PWD. Любое из этих решений означает, что в списке команд нет видимого пароля.

1 голос
/ 20 мая 2009

В bash это, вероятно, будет так же просто, как:

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

С файлом .php, содержащим ваш запрос MySQL.

Вы также можете запустить оператор MySQL напрямую через клиент MySQL (он уже был опубликован), но вам следует опасаться, чтобы ваш пароль MySQL был в вашем системном журнале / истории.

1 голос
/ 20 мая 2009

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

0 голосов
/ 20 мая 2009

Вы можете написать это на Python таким образом ...

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

Принимает URL источника в качестве первого аргумента и имя файла назначения в качестве второго. Обратите внимание, что здесь используется собственная библиотека поиска URL-адресов Pythons urllib, если по какой-либо причине вам нужно использовать именно wget, вы можете импортировать модуль 'os' и использовать os.system ('ваша командная строка').

В Unix вы можете запустить скрипт в фоновом режиме, набрав 'python scriptname.py &'

0 голосов
/ 20 мая 2009

Почему бы не использовать file_get_contents или curl для загрузки файла из 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'");
0 голосов
/ 20 мая 2009

Ну, вы могли бы просто поместить его в сценарий оболочки.

Я не знаю достаточно о Shell, чтобы сказать, как, хотя

...