永久更改 /var/run/postgresql 的權限
在 Linux Mint 17.0 Cinnamon Edition 上,我想將其用作所有 postgres 數據庫
/var/run/postgresql
的unix_socket_directories
選項。每當我執行命令
pg_ctl -D postgres-data -o '-F -p 33311' start
啟動本地數據庫時,都會收到錯誤消息FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.33311.lock": Permission denied
。正如 AskUbuntu、StackOverflow 和各種論壇上的許多答案所暗示的那樣,我必須執行
sudo chmod 777 /var/run/postgresql
或sudo chown -R $USER:$USER /var/run/postgresql
更改目錄的權限,以便我可以寫入它。然後我就可以啟動我的數據庫了。但是,每次我重新啟動時,權限都會消失;該目錄不再是全域可寫的,並且使用者postgres-xc
收回使用者和組對該目錄的所有權。既不也不
sudo adduser $USER postgres
緩解sudo adduser $USER postgres-xc
權限問題。我嘗試按照此處所述進行全新安裝,但重新啟動時仍然存在問題。
我嘗試將值更改
unix_socket_directories
為/tmp
in./postgres-data/postgresql.conf
(本地數據庫配置文件),這使我可以啟動該特定數據庫,而無需在每次重新啟動時更新權限。但是,我還有一個腳本,用於pg_ctl -D $DIR initdb && pg_ctl -D $DIR start
即時設置和啟動數據庫。因此,postgresql.conf
這些數據庫使用預設配置文件,因此在執行該腳本時出現unix_socket_directories
不可寫/var/run/postgresql
和權限被拒絕錯誤。手動/以程式方式即時編輯這些配置以供使用unix_socket_directories = '/tmp'
是……不可取的。我知道我可以使用
-o
標誌 withpg_ctl
來覆蓋unix_socket_directories
選項 to/tmp
,但是這個腳本由不使用 Ubuntu 的其他開發人員共享,所以我不一定要限制每個人都使用該/tmp
目錄,特別是如果他們的配置略有不同。我希望每個人都使用預設位置進行安裝。就個人而言,我也更願意保留預設目錄,以便與其他 Ubuntu 軟體包兼容;例如,pgadmin/var/run/postgresql
預設會查找鎖定文件。我也嘗試過編輯
/etc/postgresql/9.3/main/pg_ctl.conf
,試圖在我使用時自動通過設置這些選項pg_ctl
:# Automatic pg_ctl configuration # This configuration file contains cluster specific options to be passed to # pg_ctl(1). pg_ctl_options = '-o "-c unix_socket_directories=/tmp -c unix_socket_group=jackson -c unix_socket_permissions=0777"'
但這沒有任何效果。
請告知我如何將我的所有 postgres 數據庫
/var/run/postgresql
用作我的unix_socket_directories
選項,而不必sudo chown -R $USER:$USER /var/run/postgresql
每次重新啟動系統時都執行。謝謝。
/var/run/postgresql 的權限取自 /usr/lib/tmpfiles.d/postgresql.conf
執行以下命令來回收目錄(立即和隨後的引導):
service='reclaim-postgresql' service_file="/etc/init.d/${service}" echo "#!/bin/sh set -e ### BEGIN INIT INFO # Provides: ${service} # Required-Start: \$postgres-xc # Required-Stop: \$postgres-xc # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Reclaim /var/run/postgresql ### END INIT INFO chown -R ${USER}:${USER} /var/run/postgresql" \ | sudo tee "${service_file}" sudo chmod +x "${service_file}" sudo update-rc.d "${service}" defaults sudo service "${service}" start
請注意,在執行
sudo apt-get upgrade
更新 postgres 時,您可能需要臨時更新sudo chown -R postgres:postgres /var/run/postgresql
才能使升級成功。