みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

cronでpg_dumpの実行

こんにちわ。
Linuxでcronを設定しPHPからexecで「pg_dump」を実行しようとしています。
エラーになり実行ができません。
設定は
/var/spool/cron ディレクトリに
『crontab -e -u postgres』でコマンドを実行し

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=''
HOME=/

08 19 * * * postgres /usr/bin/php /home/var/b_dump.php

とcrontabに記載しています。
コマンドの実行はrootユーザで
権限は777
にしています。

メールを届くようにしているのですが、届くメールは
『postgres does not know where to find the server configuration file.
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.』
と届きます。

googleで検索したのですが、解決方法がわかりません…。
読みにくい文章で申し訳ないのですが、解決方法のご教授を
お願いします。

投稿日時 - 2008-06-16 11:48:27

QNo.4104718

困ってます

質問者が選んだベストアンサー

#1です。
なるほど。postgresというのはコマンドのつもりじゃなくて、実行ユーザ名指定のつもりだったんですね。
コマンドとしてはそれで良いでしょう。

>pg_dump: [archiver (db)] connection to database "postgres" failed: fe_sendauth: no password supplied

パスワードの指定が必要だが指定されていないというメッセージです。

>PHPのカテゴリに質問をした方がいいのかもしれませんが、

PHPは関係ありません。PostgreSQLのカテゴリで質問してください。
pg_dumpをちょっと調べてみましたが、-U でユーザ指定している例はみつからないですね。

投稿日時 - 2008-06-17 21:30:55

お礼

何度も回答ありがとうございます。
もう少し自分で調べてみて、解決しなければ、
PostgreSQLのカテゴリで質問させて頂きます。
ありがとうございました。

投稿日時 - 2008-06-18 09:13:04

ANo.3

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

おそらく /etc/crontab を見て設定されたのでしょうが、/etc/crontab と 各ユーザーごとのcrontabは書式が違っています。
以下、man 5 crontabからの引用

 >各行には 5 つの時刻・日付フィールドがあり、
 >(システムの crontab ファイルの場合) ユーザー名が続き
 >さらにコマンドが続く。

つまり、システムのcrontabの場合のみ、ユーザー指定フィールドが存在します。
従って、amountainblastさんの設定の場合、ユーザーを指定しているつもりのところが、postgresコマンドを実行していることになりますね。

投稿日時 - 2008-06-16 22:47:29

お礼

回答ありがとうごじあます。
ご指摘の通り ユーザー指定フィールドを をcrontabからとってみたら、違うエラーが届くようになりました。

現在は
50 09 * * * /usr/bin/php /home/var/b_dump.php
と設定しました。

Password:
pg_dump: [archiver (db)] connection to database "postgres" failed: fe_sendauth: no password supplied

とエラーが来るようになったのですが、このエラーだとpg_dumpのオプションの渡し方が悪いのでしょうか?
PHPソースは
exec("pg_dump -U postgres -Wtest01 -t postgres > {$b_data_txt}");
と記述しています。
PHPのカテゴリに質問をした方がいいのかもしれませんが、
もう少しご教授をお願いします。

投稿日時 - 2008-06-17 10:02:25

ANo.1

『postgres does not know where to find the server configuration file.
You must specify the --config-file or -D invocation option or set the PGDATA environment variable.』

訳します。

Postgresは、サーバー設定ファイルがどこにあるか見つけることが出来ません。
あなたは、起動オプションの --config-file か -D で設定ファイルを指定するか、PGDATA という環境変数で設定ファイルを指定する必要があります。

それ以前の問題として、postgresコマンドの引数に /usr/bin/php を指定しているのは間違っていると思います。意味不明のコマンドでは?
phpを実行するんですよね?

投稿日時 - 2008-06-16 21:37:11

お礼

回答ありがとうごじあます。
このcronではphpを実行しようとしています。
phpのexecでpg_dumpを実行しようとしています。
ご指摘の通り /usr/bin/php をcrontabからとってみたのですが、
phpが実行されていません。

現在は
50 09 * * * /usr/bin/php /home/var/b_dump.php
と設定しました。

Password:
pg_dump: [archiver (db)] connection to database "postgres" failed: fe_sendauth: no password supplied

とエラーが来るようになったのですが、このエラーだとpg_dumpのオプションの渡し方が悪いのでしょうか?
PHPソースは
exec("pg_dump -U postgres -Wtest01 -t postgres > {$b_data_txt}");
と記述しています。
PHPのカテゴリに質問をした方がいいのかもしれませんが、
もう少しご教授をお願いします。

投稿日時 - 2008-06-17 10:00:55