ファイルをダウンロードするwgetコマンドが終了した後にMySQLのクエリを実行します

StackOverflow https://stackoverflow.com/questions/886061

質問

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

  

wgetのます。http://domain/file.zipする

その後、実行します:

  

UPDATE tableのSETのstatus = 'ライブ' WHERE id = '1234'

どのように私はこれをやって行くのでしょうか?

役に立ちましたか?

解決

あなたがあなたのmysqlコマンドを実行する前に、それが完了したことを確認できるように、

私はサブシェルでwgetコマンドを起動することをお勧めします。 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

MySQLのクエリを含むの.phpファイルを使用してます。

また、MySQLクライアントを経由して直接MySQLのステートメントを実行します(つまり、すでに投稿されています)ことができますが、あなたはあなたのsyslog /歴史の中で、あなたのMySQLのパスワードを持つのを警戒する必要があります。

さて、あなただけのシェルスクリプトでそれを置くことができます。

私はどのようにかかわらず、

あなたに伝えシェルについて十分に知りません

なぜ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'");

これは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を取ります。何らかの理由であなたは、特にあなたが「OSのモジュールをインポートし、(「あなたのコマンドライン」)。

os.systemを使用することができますwgetコマンドを使用している場合、これは、ニシキヘビ自身のURL検索ライブラリurllibはを使用しています注意してください。

UNIXでは、「Pythonのscriptname.py&」

を入力して、バックグラウンドでスクリプトを実行することができます
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top