• ベストアンサー
  • 困ってます

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

共感・応援の気持ちを伝えよう!

  • Linux系OS
  • 回答数3
  • 閲覧数2332
  • ありがとう数9

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

その他の回答 (2)

  • 回答No.2

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1
  • notnot
  • ベストアンサー率47% (4738/9988)

『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を実行するんですよね?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • fedora11でのcron設定

    fedora11,apache,php5の環境でcronを使いたいのですが、動きません。。 状況が、 fedora11 php5 apache を使用していて、cronを使ってphpの定期実行を行いたいのですが、どうしてもうまくいきません。 かなりググってはみたのですが、liuxについては初心者なので、どうにもわかりません。 設定内容が、 /etc/crontabが、 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ * /1 * * * * apache /usr/bin/php /var/www/html/cron.php で、/var/log/cron でログを確認したところ Jul 28 19:00:01 host CROND[8417]: (apache) CMD (/usr/bin/php /var/www/html/cron.php) となっていてこれが一分ごとに出てきます。 cron.phpにはファイル追記の処理を書いてあります。 エラーではないようなのですが、ファイル操作が行われていないようなので動いていないようなのです。 ローカルホストでphpを実行したらちゃんと動くのでphp内のミスではないようです。 パーミッション関係だったらログにエラーが出そうなものですし、、、。困っています。。 どなたかお知恵を貸していただけませんでしょうか、よろしくお願いします。

  • cronの実行結果通知メールの配信をさせないようにするには?

    RedHat9を使用してます。 # cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ : # crontab -l | more # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.12227 installed on Thu Feb 3 02:58:29 2005) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) # crontab -e SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ : としていて、 記述が増えるに従ってcron実行済みの通知メール数が多くなってきましたので 配信させないように双方とも MAILTO="" してみたのですが相変わらず届いてしまいます。 相変わらずローカルのrootが送信しているようです。 どうすれば配信させないようにできるのでしょうか?

  • PHPをバージョンアップしたらCRONが動かない

    CentOSとPHPをバージョンアップしたら、CRONだけが動かなくなってしまいました。 PATH関係が変わったことが問題のような検討がつくのですが、いろいろ試してもうまくいきません。どのように解決したら良いか教えていただければと思います。 [バージョンアップ内容] CentOSを5.3から5.7にバージョンアップ PHPを5.1.6から5.3.3にバージョンアップ phpMyAdmin3.4.8をインストール MySQL 5.0.77(バージョンアップせず) バージョンアップ前には ・PHPからMySQLにデータを登録するプログラムは動作していた。(ウェブサイト形式で動作確認) ・上記のプログラムはCRONで動いていた。(CRONでも動作確認) PHP5.1.6の時はCRONに下記のように登録していました。 10 * * * * /usr/bin/php /var/cron_file/test_cron.php アップデート後にウェブサイト形式でプログラムが動くことを確認しました(ページを開くと下記のプログラムが動作し、データをMySQLに登録) phpMyAdminも問題なく動きます。 CRONの問題点を探し出すために下記のことを行いました。 CRONのステータスを確認 # /etc/rc.d/init.d/crond status crond (pid 32151) を実行中... CRONをリスタート # /etc/init.d/crond restart crond を停止中: [ OK ] crond を起動中: CRONのエラーの確認 # vi /var/log/cron PHPの場所の確認 # find / -name php /usr/share/php /usr/include/php /usr/bin/php /usr/lib64/php /var/lib/php どれがPHPの場所なのかがわからないので、とりあえず5.1.6の時に指定していた「/usr/bin/php」を採用 このあたりはネットで情報を探して、登録してみたので正しいのかどうかよくわかりません。↓ PATHの記入 (その1) # vi /root/.bash_profile PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin export PATH (その2) #vi /etc/profile PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin export PATH PATHの確認 # env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/php (上記以外にもいろいろいじっていたら、このようになってしまいました。上記以外のところでどこで設定したかがわからないので、PATHを消す方法も教えていただければと思います) 「/usr/kerberos/sbin:/usr/kerberos/bin」はもともとシステムで登録されていたもので、上記で登録した「/sbin:/usr/sbin:/bin:/usr/bin」以外のもの「/usr/bin/php」などはどこで登録したかわからなくなってしまったものです。 CRONでPATHを指定する部分でPHPのバージョンによりPATHの値が異なるという情報を見つける /usr/bin/php /usr/bin/php5 /usr/bin/php53 各パターンで 「10 * * * * /usr/bin/●● /var/cron_file/test_cron.php」 をcrontab -eに登録してエラーを見てみる。 (1)「*/1 * * * * /usr/bin/php /var/cron_file/test_cron.php」 # vi /var/log/cron →エラーに何も表示されない (2)「*/1 * * * * /usr/bin/php5 /var/cron_file/test_cron.php」 → エラーに何も表示されない。 (3)「*/1 * * * * /usr/bin/php53 /var/cron_file/test_cron.php」 →エラーが表示される Dec 16 20:20:01 ドメイン crond[11412]: (root) CMD (/usr/bin/php5 /var/cron_file/test_cron.php) クローン自体は動いていて、エラーがでているような感じは把握できたのですがここで行き詰まりました。 PHPのパス関係か、MySQLのパス関係、PHPとMySQLの連係、そのあたりのどこかが原因なのでしょうか? 参考資料としてphpinfo()の情報を記載します。 Loaded Configuration File  /etc/php.ini PATH /sbin:/usr/sbin:/bin:/usr/bin 参考)プログラムの内容 --------------------------------------------- require_once ('/var/DB接続情報保存ディレクトリ/password.php') try { $dbh = new PDO($DSN , $DBUSER , $DBPASS); $query=<<<EOF INSERT INTO test (name) VALUES (:name) EOF; $stmt = $dbh->prepare($query);    $name='斉藤太郎'; $stmt->bindParam(':name', $name); $stmt->execute(); }//try_end catch(PDOException $e) { print "Error!: " . $e->getMessage() . "<br>"; die(); }//catch_end ---------------------------------------------

    • ベストアンサー
    • PHP
  • cronが動かない

    cron初心者なのでお願いいたします。 fedora5で以下のようなCronを動かそうとしています。 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin HOME=/htdocs/program 45 18 * * * perl U9901.pl rootで作成し、/var/spool/cronのrootの実行権限は755になっています。 しかし実行されません。 編集後、crondは再起動しています。 どのような原因が考えられますでしょうか? 過去ログも見たのですが、それらしいものが無かったので質問させてください。 お願いします。

  • さくらVPSでcronでphpを実行

    さくらVPSでcronでphpを実行したいのですが、うまくいきません? vi /etc/crontab    ↓ 30 * * * * root /usr/bin/php/var/www/html/oms-main2/end.php 実行できないので /etc/rc.d/init.d/crond status → crond (pid 2559) を実行中 ちなみにend.phpは、手動では動きます。 宜しくご教授お願い致します。

  • cronの設定

    Linux, cron, PHP CLI版を使って、定期的にPHPスクリプトを実行させようとしておりますが、どうも上手くいきません。 コマンドラインで試すと上手くいくのですが、cronを使用して動かすと、実行結果が Could not open input file: /home/---/---/--/test.php と返ってきて、実行されておりません。 以下、crontabの内容です。 MAILTO="-------.com" */1 * * * * /usr/local/bin/php /home/---/---/---/test.php お忙しい中すみませんが、どなたかアドバイスをいただけないでしょうか?

    • ベストアンサー
    • PHP
  • cronでとても困っています どなたかご教授いただけないでしょうか

    cronの設定でpersonユーザーで動くように設定したいのですが、動いてくれません なにか設定がおかしいのでしょうか ↓crontabの内容です # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.4208 installed on Thu Jan 25 12:14:20 2007) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ 15 12 * * * person /home/test/bin/test.sh rootに送られてくるエラーメッセージです /bin/bash: line 1: person : command not found ご教授いただけたら幸いです 何卒宜しくお願いいたします

  • PHPファイルをcronで定期的に実行したい

    centosでtest.phpを30分おきに動作させようと思います。 test.phpは /var/www/html/においてあります。 test.phpはコードの中で、require_once 'phpkit/kits.inc';と /var/www/html/phpkit/kits.incを呼び出しています。 [root]# find / -name php /root/src/senna-1.1.4/bindings/php /usr/share/swig/1.3.40/php /usr/share/php /usr/bin/php /usr/include/php /usr/lib64/php /var/lib/php [root]# /etc/rc.d/init.d/crond status crond (pid 1181) is running... [root]$ crontab -e 30 * * * * /usr/bin/php /var/www/html/test.php しかし、以上のように設定してもtest.phpは一度も実行されません。 phpのインストールは、ここの「PHPをソースからインストール」を利用しました。 http://www.akiyan.com/blog/archives/2008/09/tritonnmysqlsen.html /var/www/html/にinfo.phpを置いてアクセスしたところ、正常に情報が表示されます。 /var/www/html/にtest.phpを置いて、手動でアクセスしたところ、test.phpは正常に動作します。 ですので恐らくcrontabの設定が間違っているのだと思いますが、これ以上どうすればいいのかがわかりません。 cronでtest.phpを動作させるのに、この後どうすればいいのでしょうか。 どなたかご教示のほど、どうかよろしくお願いします。

  • さくらVPSでcron指定はsh? php?

    これまで別のレンタルサーバで動作していたcronをさくらVPSでも動作させたいのですがうまくいきません。 ■これまで(レンタルサーバ) 1.cronにshファイルを指定 2.shファイル cd /var/www/★★ /usr/local/bin/php -d include_path='.:./●●.php ■今回(さくらVPS) /etc/crontab/ 05 7 * * * root /usr/bin/php /var/www/■■.sh ・どうしたら動作するでしょうか? ・/etc/crontab/の指定先は「phpファイル」「shファイル」の何れを指定するのでしょうか?

  • cronでPHP実行

    お世話になります。 OSはクライアントの為、恐縮ながら何を使用しているか不明となっております。 PHPバージョンは5.1.6です。 cronを使用して、毎日特定の時間に、メールを配信するPHPスクリプトを実行しようと試みているのですが、エラーメールが返ってきてしまいます。 因みに、URLを直接指定して実行した場合は正常にメールが配信されます。 設定方法は、crontab -e で 0 12 * * * /usr/lib/php -q /home/hoge/public_html/mail.php と記述しております。 返ってくるエラーメールの内容は、以下の通りです。 Content-Type: text/plain; charset=UTF-8 Auto-Submitted: auto-generated X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/home/hoge> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=hoge> X-Cron-Env: <USER=hoge> Message-Id: <xxxxxx@xxxxxxxxxx> Date: Sun, 28 Sep 2008 12:00:01 +0900 (JST) /bin/sh: /home/hoge/public_html/mail.php: Permission denied 以上、対策方法についてご存知の方がおられましたら、ご教授よろしくお願い致します。