2017-01-18 14 views
0

シェルスクリプトを使用してPIVOTAL HAWQデータベースをバックアップしようとしています。PIVOTAL HAWQバックアップ - シェルスクリプトエラー

取得エラー:

/home/gpadmin/backup_db.sh: line 12: pg_dump: command not found 

入力シェルスクリプト:backup_db.sh

#!/bin/bash 
# Location to place backup. 
backup_dir="/home/backup/" 
#String to append at the name of the backup files 
backup_date=`date +%d-%m-%Y` 
#Numbers of days we want to keep copy databases 
number_of_days=7 
databases=(prod test gpadmin) 
for i in ${databases[@]}; do 
    if [ "$i" != "template0" ] && [ "$i" != "template1" ]; then 
    echo Dumping $i to $backup_dir$i\_$backup_date 
    pg_dump $i|gzip > $backup_dir$i\_$backup_date.gz 
    fi 
done 
find $backup_dir -type f -prune -mtime +$number_of_days -exec rm -f {} \; 

CRONTAB:SHELL SCRIPT FOR ENTRY - */5 * * * */home/gpadmin/backup_db.sh> /tmp/bkp.log

シェルを手動で実行してデータをダンプするとき。しかし同時に、5分ごとに実行されるcrontabで作業していない。

ご迷惑をおかけして申し訳ございません。

+0

cronジョブの実行時にPATHが設定されていないように見えます。そのため、 'pg_dump'コマンドが見つからないのです。 – codeforester

+0

@codeforester PATH? – NEO

+0

pg_dumpはmppに優しいものではありません。すべてのデータはマスターを経由してローカルディレクトリに転送されます。 Hawqはhadoop hdfsに立っています。 hdfsデータをローカルディレクトリに戻しています。これは意味をなさない。 –

答えて

1

cronから実行する場合は、スクリプトにhawqバイナリを用意する必要があります。

#!/bin/bash 
# Source hawq binaries 
. /usr/local/hawq/greenplum_path.sh #Change into your exact binaries location 

# Location to place backup. 
backup_dir="/home/backup/" 
+0

私はHAWQバイナリをソースし、cronで作業を開始しました。ありがとう、トン。 – NEO

1

crontabがpg_dumpバイナリを見つけられないというPATHの問題のようです。pg_dump(usr/local/hawq/bin/pg_dump)の絶対パスでスクリプトを実行してみてください。

pg_dumpコールを呼び出す前に/usr/local/hawq/greenplum_path.shをソースすることもできます。

+0

絶対パスのハードコーディングは理想的ではありません。それに応じてPATHを設定するセットアップスクリプトを用意する方がはるかに良いです。そして、 'source'はそのスクリプトをその仕事に取り入れます。 – codeforester

+0

PGHOST = "localhost" PGUSER = "postgres" PGBIN = "/ usr/bin" – NEO

+0

正しいバイナリを取得するために環境変数を指定することができます –

関連する問題