永久更改 /var/run/postgresql 的权限

永久更改 /var/run/postgresql 的权限

在 Linux Mint 17.0 Cinnamon Edition 上,我想将其用作所有 postgres 数据库的选项/var/run/postgresqlunix_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/postgresqlsudo chown -R $USER:$USER /var/run/postgresql更改目录的权限,以便我可以写入它。然后我就可以启动我的数据库了。然而,每次我重新启动时,权限就会消失;该目录不再是全局可写的,并且用户postgres-xc收回该目录的用户和组所有权。

两者都没有sudo adduser $USER postgressudo adduser $USER postgres-xc减轻了权限问题。

我尝试按照描述进行全新安装这里,但我仍然遇到重新启动的问题。

我尝试将(本地数据库配置文件)中的值更改unix_socket_directories为,这使我可以启动该特定数据库,而无需在每次重新启动时更新权限。但是,我还有一个用于动态设置和启动数据库的脚本。因此,这些数据库使用默认配置文件,因此不可写,并且在运行该脚本时出现权限被拒绝错误。手动/以编程方式即时编辑这些配置以供使用是......不可取的。/tmp./postgres-data/postgresql.confpg_ctl -D $DIR initdb && pg_ctl -D $DIR startpostgresql.confunix_socket_directories/var/run/postgresqlunix_socket_directories = '/tmp'

我知道我可以使用 标志-opg_ctl覆盖unix_socket_directories的选项/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"'

但这并没有任何效果。

请告知我如何将/var/run/postgresqlunix_socket_directories用作所有 postgres 数据库的选项,而不必sudo chown -R $USER:$USER /var/run/postgresql每次重新启动系统时都运行。谢谢。

答案1

/var/run/postgresql 的权限取自 /usr/lib/tmpfiles.d/postgresql.conf

答案2

运行以下命令来回收目录(立即以及在后续引导时):

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才能使升级成功。

答案3

根据您的 init 系统,在 PostgreSQL 的相关 init 脚本中添加 chown/chmod 命令,例如/etc/init.d/postgresql.

答案4

用于pg_ctl -D ... -o "... -k /tmp" start创建套接字/tmp

相关内容