Мне нужно запустить определенный запрос mysql на wget, который работает в фоновом режиме, завершает загрузку файла. Например…
wget http: //domain/file.zip
затем выполните:
UPDATE
table
SETstatus
= 'live' WHEREid
= '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 в своем 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 &'