1

バックグラウンドで実行されている wget がファイルのダウンロードを完了すると、特定の mysql クエリを実行する必要があります。例えば...

wget http://domain/file.zip

次に実行します:

更新tableセットstatus= 'ライブ' WHERE id= '1234'

どうすればこれを行うことができますか?

4

6 に答える 6

3

mysql コマンドを実行する前に確実に完了するように、サブシェルで wget コマンドを起動することをお勧めします。bash では、これは括弧で行われます。

また&&、wget コマンドの終了ステータスが成功の場合にのみ mysql コマンドが実行されるように使用します。

#!/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 ステートメントを直接実行することもできますが (これは既に投稿されています)、syslog/history に MySQL パスワードが含まれていることに注意してください。

于 2009-05-20T04:34:54.413 に答える
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 を最初の引数として受け取り、宛先ファイル名を 2 番目の引数として受け取ります。これは Python 独自の URL 取得ライブラリ urllib を使用することに注意してください。何らかの理由で特に wget を使用する必要がある場合は、「os」モジュールをインポートして os.system('your command line') を使用できます。

Unix では、「python scriptname.py &」と入力してバックグラウンドでスクリプトを実行できます。

于 2009-05-20T04:31:00.640 に答える
0

まあ、それをシェルスクリプトに入れるだけです。

シェルについては、その方法を説明できるほど詳しくありませんが、

于 2009-05-20T03:56:27.780 に答える
0

PHP内からファイルを使用file_get_contentsまたはダウンロードしないのはなぜですか?curl

$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 に答える