バックグラウンドで実行されている wget がファイルのダウンロードを完了すると、特定の mysql クエリを実行する必要があります。例えば...
次に実行します:
更新
table
セットstatus
= 'ライブ' WHEREid
= '1234'
どうすればこれを行うことができますか?
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
環境変数を使用することもできます。これらの解決策のいずれも、コマンド リストにパスワードが表示されないことを意味します。
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
MySQL クエリを含む .php ファイルを使用します。
また、MySQL クライアント経由で MySQL ステートメントを直接実行することもできますが (これは既に投稿されています)、syslog/history に MySQL パスワードが含まれていることに注意してください。
したがって、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 &」と入力してバックグラウンドでスクリプトを実行できます。
まあ、それをシェルスクリプトに入れるだけです。
シェルについては、その方法を説明できるほど詳しくありませんが、
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'");