- PR -

Cygwin + PostgreSQLでpostmasterが起動できません

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/10/06
投稿数: 7
投稿日時: 2005-10-25 14:03
現在Cygwin上でPostgreSQLを実行しようとしていますが、どうしてもpostmasterが実行できません。
バージョンはCygwin1.5.18-1とPostgreSQL7.4.5-1の組み合わせです。
このバージョンの組み合わせではcygwin1.dllを変更した方が良いとの記事を見たので、それも試してみましたが、立ち上がりませんでした。

環境変数は
PGLIB=/lib/postgresql
PGDATA=/home/postgres/data
CYGWIN=server
が設定されております。

なお、CygwinはDefaultインストールです。
またPostgreSQLはソースからのインストールではなく、Cygwinのsetup.exeからインストールしました。
またCygserverは立ち上がっていますので、initdbは問題なく実行できます。

Windowsサービスへのインストールスクリプトは下記の通りです。
cygrunsrv -I PostgreSQL -p/usr/bin/postmaster -a"-D/home/postgres/data -i" -o
この後、net start PostgreSQLをしてみても、実行できませんでした。
なお、/usr/bin/pg_ctl -D /home/postgres/data -l logfile -o "-i" start
を実行するとpostmaster successfully startedと表示されますが、状態は変わらず、
/usr/bin/postmaster -D /home/postgres/data
を実行すると何の表示もなく、ログも変わりありません。
どのスクリプトで実行しても/home/postgres/dataフォルダには*.pidファイルは作成されておらず、また/var/logにもログが出力されておりませんでした。
いろいろ試行錯誤してみたのですが、どうしても起動できません。
もし、何かお気づきの点がありましたら、教えていただけないでしょうか?
よろしくお願いします。
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2005-10-25 17:33
もう少しだけ、状況説明が必要かと思います。


* OSが不明

サービスへインストールできたことから、WindowsNT系(WindowsNT3.51/NT4.0//2000/XP/2003)だと
推測できるのですが、それ以上こちらでは絞り込めません。
(さらにWindows Vistaβかも、などと穿った見方もできますし)


* 作業の根拠となる文書が不明

作業の手順の参考にした文書やWebページを示してくだされば
「Cygwinの場合、この文書のここの手順ではダメ」とか「このWebページの内容は古い」とか
指摘できるかもしれません。


なお、CygwinのPostgresql-7.4.5にも、次の場所にREADME(postgresql-7.4.5.README)が
あります。(この文書の場所は、次のコマンドで調べられます)
$ cygpath -w /usr/share/doc/Cygwin/postgresql-7.4.5.README


* サービスとして動かすとトラブルシューティングがやりにくい

また、サービスで動かしてしまうと、画面にはエラーメッセージが表示されません。
エラーメッセージはイベントログに書かれます。書かれないこともあります。
いずれにせよ、メッセージを見るのが面倒になります。
トラブルシューティング時にはサービスで動作させない方がよいでしょう。


* 環境変数の種別が不明

Windowsのシステム環境変数、ユーザー環境変数、あるいはbashの環境変数、シェル変数の
どれに設定されたのかわかりません。

また、通常、環境変数PGLIBを定義する必要はありません。

さらに、環境変数PGDATAを設定しているのに、サービスの登録には環境変数を使われてません。
(cygrunsrvの -a"-D/home/postgres/data -i")
いずれか一方を間違った場合、なかなか気がつかないことがあります。


* コマンドの実行結果が示されていない

引用:
この後、net start PostgreSQLをしてみても、実行できませんでした。



「実行できない」と判断されたと言うことは、なんらかの手段で確かめられたと思います。
それを示された方がよいでしょう。

たとえば (1)net startコマンドでXXXXXというエラーメッセージが表示された
(2) エラーは表示されずXXXXというメッセージが表示されたが、psコマンドでXXXXプロセスが
見つからなかった (3) psコマンドでも見つかったがpsqlで試しに接続しようとしたところ、
XXXXというエラーが出た、など。

引用:
なお、/usr/bin/pg_ctl -D /home/postgres/data -l logfile -o "-i" start
を実行するとpostmaster successfully startedと表示されますが、状態は変わらず、



この「状態は変わらず」というのは、具体的にどういう状況で、さらに
「変わらず」というのはどうやって判断されたのか、その状況と確認手順を示した方が
よいでしょう。

他になにか画面に表示されていませんか?
別のbashを開いて、psコマンドでプロセスの存在を確かめましたでしょうか?
別のbashを開いて、試しにpsqlコマンドでPostgreSQLに接続してみましたか?

あと、最初に試すのなら、postmasterかpg_ctlかのどちらか一方に絞った方がよいでしょう。
(pg_ctlの方が簡単ですが、サービスとしてインストールできるのはpostmasterだけですので、
悩ましいところです)


* ログファイルの状況

引用:
また/var/logにもログが出力されておりませんでした。



これは、少なくとも次の3通りの解釈が考えられます。

(1) ログファイルが存在しない (2) ログファイルは存在するが、0バイト
(3) ログファイルが存在し、内容もあるが、内容が更新されない。

これもより詳しく書かれた方がよいと思います。
未記入
会議室デビュー日: 2005/10/06
投稿数: 7
投稿日時: 2005-10-27 16:33
ちいにぃ様、丁寧なご回答ありがとうございます。
実はこの後、ネット環境がないもう一つのマシンで試していたため、レスが遅くなり申し訳ありません。
まずは、現状から報告いたしますと、ご指摘頂いた通り、サービスでの起動を後回しにし、postmaster,pg_ctlからの起動を試みました。
その結果、ディレクトリ・ファイルへの権限付与などにより、postgresを起動することができるようにはなりましたが、まだサービスでの起動はできない状態です。

そこで、ご指摘頂きました点について解答します。
1.OSについて
最初に書き込みをした時はWindows2000Professionalで、現在はWindowsXP Proでも試しましが、どちらもサービスでの起動はできておりません。

2.作業の順序について
主に下記のページを参考に致しました。
http://discypus.jp/wiki/?Cygwin%2FPostgreSQL%2F%A5%BB%A5%C3%A5%C8%A5%A2%A5%C3%A5%D7%28cygserver%C8%C7%29

3.環境変数について
環境変数は/etc/profileに追記しました。
set,exportコマンドで設定を確認しております。

4.コマンドの実行結果について
@net start PostgreSQLの結果
「PostgreSQLサービスを開始できませんでした。」と表示される。
A「コンピュータの管理」の「サービスとアプリケーション」から実行した結果
「ローカルコンピュータのPostgreSQLサービスを開始できません。エラー1053:そのサービスは指定時間内に開始要求または制御要求に応答しませんでした。」というエラーが表示される。

5.ログファイルの状況
以前出力された内容のまま残っていてタイムスタンプ、内容共に変更されていない状況です。
(3)の状況でしょうか。

ご指摘事項に対する回答は以上となります。
もし、何か確認するべき点などが、お気づきでしたら教えて頂きたく思います。
よろしくお願いします。
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2005-10-27 19:37
とりあえず気になる点を述べます。

* イベントビューアにログは出てないですか?

ログファイルになにも書き込まれなくても、イベントビューア側に何らかのメッセージが出ているかも
しれません。
(でも、「コンピュータの管理」の「サービスとアプリケーション」から実行した結果 と同じかも)


* ログファイルへの書き込み権限がない?

サービスを実行するユーザがログファイルへの書き込み権限がないかもしれません。
Cygwinのlsやgetfaclコマンドで調べてみてください。

たしか、postmasterをコマンドラインから実行した場合に作られるログファイルには
サービスを実行するユーザからの書き込み権限は設定されていない、と思います。

もしそうでしたら、ログファイルに書き込み権源を付加するか、いったん別のファイルに
リネームしてしまうのがよいでしょう。


* 実行権限が不足?

サービスを実行するユーザに対して、postgres.exe (/usr/bin/postmaster -> /usr/bin/postgres.exe) や
postgres.exeが使用するDLLに対して、実行権限が与えられていないかもしれません。

こちらもCygwinのlsやgetfaclコマンドで調べたり、runasコマンド(Windows2000,XPに付属)で
実際にサービスを実行するユーザでbashを実行して、そこからpostmasterを実行できるかどうか
調べてみるとよいでしょう。

少なくともデフォルトでは、インストールしたユーザ以外には実行権限は与えられて
いなかったと思います。もしそうなら、chmodやsetfaclで実行権限を与えてやりましょう。

(この件は /usr/share/doc/Cygwin/postgresql-7.4.5.README の issues 3 に書かれています。)


* サービスで使用できる環境変数

環境変数は親プロセスのものを引き継ぎます。

/etc/profileに定義した環境変数(=ash, bashを起動したときに読み込まれる)はbash,ashから
起動されるプロセスに対して有効ですが、サービスはこれらのプロセスから起動されては
いません。

サービスの親プロセスはWindows自身で、このとき使える環境変数はWindowsのシステム環境変数
だけです。

また、今回サービスで起動するpostmasterの親プロセスはcygrunsrvですので、こちらで定義した
環境変数も渡せます。

すなわち、cygrunsrvで起動されるサービスに環境変数の値を渡す方法は次の2つだけです。

1) Windowsのシステム環境変数に定義(修正したらWindowsの再起動が必要)
2) cygrunsrvの--envオプションで定義(修正したらサービスの削除/再登録が必要)
ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2005-11-01 04:45
うろ覚えでなんですが....
私も、全く同様の事が発生した覚えがあって、
確か「pid又はログ」ファイルの属するディレクトリにパーミッションが足りなくて
失敗していた気がします。

1

スキルアップ/キャリアアップ(JOB@IT)