2012-05-24 22 views
2

我發現postgresql v9.0.7在啓動時默認運行在bg模式下(命令如下)。之前當我們使用postgresql v7.4.2時,它曾經以前臺模式運行。Postgresql 9.0默認運行在bg

我使用的是freebsd 8.2 64位環境。 Postgresql v9.0.7使用WITHOUT_XML,WITHOUT_GETTEXT和WITHOUT_GNUGEOPT選項進行設置。

c670e04:rkananth 16]在/ usr/local/bin目錄/ Postgres的--version 的Postgres(PostgreSQL的)9.0.7

c670e04:rkananth 7] setenv PGDATA /data/db/postgres/ 
c670e04:rkananth 11] /data/bin/runas pgsql /usr/local/bin/postgres 
c670e04:rkananth 12] ps -A | grep post 
65165 ?? Ss  0:00.01 /usr/local/bin/postgres 
65167 ?? Ss  0:00.00 postgres: writer process (postgres) 
65168 ?? Ss  0:00.00 postgres: wal writer process (postgres) 
65169 ?? Ss  0:00.00 postgres: autovacuum launcher process (postgres) 
65170 ?? Ss  0:00.00 postgres: stats collector process (postgres) 
65224 0 S+  0:00.00 grep post 

c670e04:rkananth 14] ps -p 65165 -o ppid 
PPID 
    1 
c670e04:rkananth 15] ps 1 
    PID TT STAT  TIME COMMAND 
    1 ?? SLs 0:00.17 /sbin/init -- 
c670e04:rkananth 16] 

還有什麼辦法,我可以迫使它來前景?

同樣看着上面的日誌,它顯示服務器進程的父級設置爲1(init)是否是服務器在bg模式下運行時的預期行爲?

但9.0.7的文檔默認說它應該在前臺。爲什麼這不會發生在我的情況,可能是一個錯誤?

更新1: /data/bin/runas沒有引入任何行爲變化,沒有它的測試。在v8.3和Freebsd 7.2 32位環境中也可以看到相同的行爲。

服務器進程成爲PID 1的子進程(init)看起來像任何應用程序作爲守護進程運行的標準行爲。

我現在的問題是 - 有沒有一種方法可以指示Postgres不作爲守護程序運行?

更新2: 得到了解決它的配置「SILENT_MODE = OFF」(默認情況下它是上)將使它在前臺運行和進程作爲外殼的子進程。有了這個問題就回答了。 (來源 - http://postgresql.1045698.n5.nabble.com/BUG-4381-Postgresql-daemon-won-t-stay-in-the-foreground-td2127518.html

+0

我很好奇(我沒有真正的* nix經驗):它有什麼不同? –

+0

它不會在linux上自行編譯。你是否100%確定'/ usr/local/bin/postgresql'是實際的postgres二進制文件,而不是一個包裝?它是自編譯的還是預編譯的? –

+0

丹尼爾:我100%確定/ usr/local/bin/postgresql是正確的二進制文件。我測試了自編譯安裝以及通過端口安裝。看到相同的行爲。 –

回答

2

事實上,postgres應該留在前臺,如聯機幫助中指出:

默認的Postgres在前臺啓動和登錄打印信息 到標準錯誤流。在實際應用 postgres應該作爲後臺進程啓動,也許在 開機時間。

最有可能的runas命令是守護進程postgres的過程。嘗試運行postgres從shell啓動的pgsql用戶:

root# su - pgsql 
pgsql$ setenv PGDATA /data/db/postgres/ 
pgsql$ /usr/local/bin/postgres 

您還可以su(1)sudo(8)嘗試,如果你不喜歡一個shell pgsql用戶的想法。

現在我想知道爲什麼你需要postgres在前臺運行。你真的有一個很好的理由嗎?

+0

runas不會守護進程肯定。這是我們完成你提到的東西的方法。我希望它成爲前臺,因爲我們有一個監視程序,它監視執行此命令的shell的PID,當它進入bg時,shell會終止並且看守程序認爲服務器已死並嘗試重新啓動並失敗(因爲服務器已在運行) –