wget完成下载文件后运行MySQL Query

时间:2009-05-20 03:54:32

标签: php mysql bash download wget

我需要在wget上运行一个特定的mysql查询,它在后台运行,完成下载文件。例如......

  

wget http://domain/file.zip

然后运行:

  

更新table设置status ='实时'WHERE id ='1234'

我将如何做到这一点?

6 个答案:

答案 0 :(得分:3)

我建议在子shell中启动wget命令,以便在运行mysql命令之前确保它完成。在bash中,这是用括号完成的。

同样使用&&,以便只有在wget命令具有成功退出状态时才运行mysql命令。

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

将密码以明文形式放入脚本not necessarily a good idea,因为可以在ps列表中查看。

相反,您可以依赖[client]文件中的~/.my.cnf部分。您还可以使用MYSQL_PWD环境变量。这些解决方案都意味着命令列表中没有可见的密码。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在bash中,它可能很简单:

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

使用包含MySQL查询的.php文件。

您也可以通过MySQL客户端(已经发布)直接运行MySQL语句,但是您应该警惕在系统日志/历史记录中使用MySQL密码。

答案 3 :(得分:0)

好吧,你可以把它放在一个shell脚本中。

我不知道壳牌会告诉你如何

答案 4 :(得分:0)

为什么不使用file_get_contentscurl从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'");

答案 5 :(得分:0)

你可以用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作为第一个参数,目标文件名作为第二个参数。请注意,这使用Pythons自己的URL检索库urllib,如果由于任何原因你必须使用wget,你可以导入'os'模块并使用os.system('你的命令行')。

在unix中,您可以通过输入'python scriptname.py&'

在后台运行脚本