/var/run/postgresql에 대한 권한을 영구적으로 변경합니다.

/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./postgres-data/postgresql.confpg_ctl -D $DIR initdb && pg_ctl -D $DIR startpostgresql.confunix_socket_directories/var/run/postgresqlunix_socket_directories = '/tmp'

플래그를 사용하여 재정의할 수 있는 -o옵션 pg_ctlunix_socket_directories있다는 것을 알고 있지만 /tmpUbuntu를 사용하지 않는 다른 개발자가 스크립트를 공유하므로 모든 사람의 해당 디렉터리 사용을 반드시 제한하고 싶지는 않습니다. /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/postgresql이것을 unix_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

update postgres를 실행할 때 업그레이드가 성공하려면 sudo apt-get upgrade일시적으로 실행해야 할 수도 있습니다 .sudo chown -R postgres:postgres /var/run/postgresql

답변3

초기화 시스템에 따라 chown/chmod 명령을 PostgreSQL의 관련 초기화 스크립트에 추가합니다(예: ) /etc/init.d/postgresql.

답변4

pg_ctl -D ... -o "... -k /tmp" start소켓을 생성하는데 사용/tmp

관련 정보