문제

백그라운드에서 실행중인 WGET에서 특정 MySQL 쿼리를 실행해야하며 파일 다운로드가 완료됩니다. 예를 들어...

wget http : //domain/file.zip

그런 다음 실행 :

업데이트 table 세트 status = '라이브'어디에 id = '1234'

이 작업을 어떻게할까요?

도움이 되었습니까?

해결책

MySQL 명령을 실행하기 전에 완료 될 수 있도록 서브 쉘에서 WGET 명령을 시작하는 것이 좋습니다. 배쉬에서 이것은 괄호로 이루어집니다.

또한 사용하십시오 && 따라서 mysql 명령은 wget 명령에 성공 종료 상태가있는 경우에만 실행됩니다.

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

스크립트에 비밀번호를 일반 텍스트로 넣는 것은 다음과 같습니다 반드시 좋은 생각은 아닙니다 a에서 볼 수 있기 때문입니다 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 비밀번호를 보유하는 데주의해야합니다.

글쎄, 당신은 그것을 쉘 스크립트에 넣을 수 있습니다.

나는 쉘에 대해 Enlough를 모른다.

사용하지 않는 이유 file_get_contents 또는 curl 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'");

따라서 파이썬으로 스크립트 할 수 있습니다 ...

#!/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 &'를 입력하여 스크립트를 백그라운드에서 실행할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top