我們已經在 ubuntu 20.04(帶有apt install -y postgresql postgresql-contrib)上安裝了 postgres v12,并希望/data/db/postgres/archive通過在以下設定中啟用歸檔postgresql.conf:
max_wal_senders=2
wal_keep_segments=256
wal_sender_timeout=60s
archive_mode=on
archive_command=cp %p /data/db/postgres/archive/%f
但是 postgres 服務無法在那里寫入:
2022-11-15 15:02:26.212 CET [392860] FATAL: archive command failed with exit code 126
2022-11-15 15:02:26.212 CET [392860] DETAIL: The failed archive command was: archive_command=cp pg_wal/000000010000000000000002 /data/db/postgres/archive/000000010000000000000002
2022-11-15 15:02:26.213 CET [392605] LOG: archiver process (PID 392860) exited with exit code 1
sh: 1: pg_wal/000000010000000000000002: Permission denied
該目錄/data/db/postgres/archive/歸postgres用戶所有,當我們su postgres能夠毫無問題地創建和洗掉檔案時。
為什么 postgresql 服務(作為 postgres 運行)不能寫入它擁有的目錄?
以下是存檔目錄的所有父級的權限:
drwxr-xr-x 2 postgres root 6 Nov 15 14:59 /data/db/postgres/archive
drwxr-xr-x 3 root root 21 Nov 15 14:29 /data/db/postgres
drwxr-xr-x 3 root root 22 Nov 15 14:29 /data/db
drwxr-xr-x 5 root root 44 Nov 15 14:29 /data
uj5u.com熱心網友回復:
2022-11-15 15:02:26.212 CET [392860] 詳細資訊:失敗的歸檔命令是:archive_command=cp pg_wal/000000010000000000000002 /data/db/postgres/archive/000000010000000000000002
因此,您的 archive_command 顯然設定為特殊的 string archive_command=cp %p /data/db/postgres/archive/%f。
替換 %variables 后,結果將傳遞給 shell。shell 執行它被告知的操作,即將(未使用的)環境變數“archive_command”設定為“cp”,然后嘗試執行檔案 pg_wal/000000010000000000000002,這是不允許的,因為它沒有執行位設定。
我不知道你是如何設法得到這樣一個變形的 archive_command,但它不是來自你向我們展示的任何東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/535303.html
