1

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

wget http://domain/file.zip

然后运行:

更新tablestatus= 'live' WHERE id= '1234'

我该怎么做呢?

4

6 回答 6

3

我建议在子 shell 中启动 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环境变量。这些解决方案中的任何一个都意味着命令列表中看不到密码。

于 2009-05-20T04:40:04.410 回答
1

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

于 2009-05-20T04:34:29.857 回答
1

在 bash 中,它可能很简单:

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

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

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

于 2009-05-20T04:34:54.413 回答
0

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

我不太了解壳牌,但无法告诉你怎么做

于 2009-05-20T03:56:27.780 回答
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'");
于 2009-05-20T04:17:22.783 回答
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 作为第一个参数,将目标文件名作为第二个参数。请注意,这使用 Python 自己的 URL 检索库 urllib,如果出于任何原因您必须专门使用 wget,您可以导入“os”模块并使用 os.system(“您的命令行”)。

在 unix 中,您可以通过键入“python scriptname.py &”在后台运行脚本

于 2009-05-20T04:31:00.640 回答