2016-07-25 4 views
0

データベースがオンラインになるのを待っているスクリプトを書こうとしています。 データベース接続をチェックするスクリプトはPythonで書かれており、5秒ごとにエキサイティングする必要があります。スクリプトが0を返した場合は、メインスクリプトを続行する必要があります。Pythonスクリプトが0を返すのを待つ

私はシェルで書かなかったので、私はpythonスクリプトをwhileループの状態にする方法しか考えていません。ここに私の試みですが、私はそれを正しくする方法がわかりません。

pythonスクリプトはうまくいきます。

psqltest.py:

#!/usr/bin/python2.4 
# 
import psycopg2 
try: 
    db = psycopg2.connect("dbname='postgis' user='postgres' host='db' password='postgres'") 
except: 
    exit(1) 

exit(0) 

私のメインのシェルスクリプト:

echo waiting for database... 
while [ python /root/psqltest.py && echo 0 || echo 1 ] 
    do 
    sleep 5 
    done 

エラーメッセージ:

+0

OTだろうが、あなたのpython 2.4を使用することに正当な理由がありますか? –

+0

実際には、私は私もpython 3を使用することができると思う – EidEchse

+0

Pythonでループをコード化し、接続が成功したときにシェルスクリプトに制御を戻すのは簡単ではないでしょうか? –

答えて

2

シェルスクリプトは、単に

while ! python /root/psqltest.py; do 
    sleep 5 
done 

やあまり知られてい

until python /root/psqltest.py; do 
    sleep 5 
done 
0

を私を助けるため

1 ] 

おかげで、私は改善しています私のスクリプト、今すぐbashはpythonスクリプトを呼び出すだけで、Kristofが言及したように、それが終了するのを待っています。これまでのところ動作していますが、私はそれをさらに改善しようとしています。

#!/usr/bin/python3 
# 
import psycopg2 
import time 
import sys 

db = None 
sys.stdout.write('waiting ') 
while db is None: 
    try: 
     db = psycopg2.connect("dbname='postgis' user='postgres' host='db' password='...'") 
     db.close() 
    except: 
     sys.stdout.write('.') 
    sys.stdout.flush() 
    time.sleep(5) 
print('') 
exit(0) 
関連する問題