アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

#1です。


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

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

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

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

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

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

お礼日時:2008/06/18 09:13

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


以下、man 5 crontabからの引用

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

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

回答ありがとうごじあます。
ご指摘の通り ユーザー指定フィールドを を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

『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を実行するんですよね?
    • good
    • 0
この回答へのお礼

回答ありがとうごじあます。
この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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!