Запустите запрос MySQL после того, как wget завершит загрузку файла

StackOverflow https://stackoverflow.com/questions/886061

Вопрос

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

wget http://domain/file.zip

тогда беги:

Обновить table УСТАНОВИТЬ status = "жить" ГДЕ id = '1234'

Как бы я это сделал на твоем месте?

Это было полезно?

Решение

Я бы рекомендовал запустить команду 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 переменная среды.Любое из этих решений означает, что пароль не отображается в списке команд.

Другие советы

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

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

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

С помощью php-файла, содержащего ваш запрос к MySQL.

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

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

Хотя я не знаю достаточно информации о Shell, чтобы рассказать вам, как это сделать

Почему бы не использовать 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'");

Таким образом, вы можете написать его на 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 &'

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top