• ベストアンサー

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

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

#1です。 なるほど。postgresというのはコマンドのつもりじゃなくて、実行ユーザ名指定のつもりだったんですね。 コマンドとしてはそれで良いでしょう。 >pg_dump: [archiver (db)] connection to database "postgres" failed: fe_sendauth: no password supplied パスワードの指定が必要だが指定されていないというメッセージです。 >PHPのカテゴリに質問をした方がいいのかもしれませんが、 PHPは関係ありません。PostgreSQLのカテゴリで質問してください。 pg_dumpをちょっと調べてみましたが、-U でユーザ指定している例はみつからないですね。

amountainblast
質問者

お礼

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

その他の回答 (2)

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.2

おそらく /etc/crontab を見て設定されたのでしょうが、/etc/crontab と 各ユーザーごとのcrontabは書式が違っています。 以下、man 5 crontabからの引用  >各行には 5 つの時刻・日付フィールドがあり、  >(システムの crontab ファイルの場合) ユーザー名が続き  >さらにコマンドが続く。 つまり、システムのcrontabの場合のみ、ユーザー指定フィールドが存在します。 従って、amountainblastさんの設定の場合、ユーザーを指定しているつもりのところが、postgresコマンドを実行していることになりますね。

amountainblast
質問者

お礼

回答ありがとうごじあます。 ご指摘の通り ユーザー指定フィールドを を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のカテゴリに質問をした方がいいのかもしれませんが、 もう少しご教授をお願いします。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.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を実行するんですよね?

amountainblast
質問者

お礼

回答ありがとうごじあます。 この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のカテゴリに質問をした方がいいのかもしれませんが、 もう少しご教授をお願いします。

関連するQ&A