Запуск MySQL-запроса после завершения загрузки файла wget

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

wget http: //domain/file.zip

затем выполните:

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

Как мне это сделать?

Related of "Запуск MySQL-запроса после завершения загрузки файла wget"

Я бы рекомендовал запустить команду 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 в своем syslog / history.

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

Я не знаю толку о 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 как первый аргумент, а имя файла назначения – второе. Обратите внимание, что это использует собственную библиотеку поиска urlib для Pythons, если по какой-либо причине вы должны использовать wget специально, вы можете импортировать модуль «os» и использовать os.system («ваша командная строка»).

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