我正在使用Vagrant + Ansible配置Ubuntu虚拟机。 Postgres安装正确但在每台机器上重新启动并重新加载目录/ var / run / postgresql缺失并且postgresql服务无法启动。要运行postgres,我需要创建unix socket目录并手动启动服务。
如果我尝试在没有套接字目录的情况下启动服务,则会出现以下错误
Error: Cannot stat /var/run/postgresql
* No PostgreSQL clusters exist; see "man pg_createcluster"
我怎样才能解决这个问题?
修改
这是我的postgresql playbook说明
---
- name: Install Postgres + PostGIS
apt: pkg={{ item }} state=installed update_cache=yes
with_items:
- libgeos-dev
- postgresql-9.3
- postgresql-contrib-9.3
- postgresql-client-9.3
- postgresql-server-dev-9.3
- postgresql-9.3-postgis-2.1
- postgresql-9.3-postgis-2.1-scripts
sudo: yes
notify:
- restart postgresql
- name: PostgreSQL on statup
service: name=postgresql enabled=yes state=started
sudo: yes
notify:
- restart postgresql
- name: Install PostgreSQL config file
sudo: yes
template: src=postgresql.conf
dest=/etc/postgresql/9.3/main/postgresql.conf
owner={{ postgresql.user }}
group={{ postgresql.group }}
notify:
- restart postgresql
- name: Install PostgreSQL Host-Based-Authentication file
template: src=pg_hba.conf.j2
dest=/etc/postgresql/9.3/main/pg_hba.conf
owner={{ postgresql.user }} group={{ postgresql.group }}
notify: restart postgresql
sudo: yes
答案 0 :(得分:0)
/var/run/postgresql
不应该在重新启动后持续存在。通常/var/run
链接在临时文件系统内。
由Ubuntu打包的postgresql的开始序列由/usr/share/postgresql-common/init.d-functions
中的此函数完成:
# start all clusters of version $1
# output according to Debian Policy for init scripts
start() {
# create socket directory
if [ -d /var/run/postgresql ]; then
chmod 2775 /var/run/postgresql
else
install -d -m 2775 -o postgres -g postgres /var/run/postgresql
fi
do_ctl_all start "$1" "Starting PostgreSQL $1 database server"
}
这个函数创建目录,所以当它丢失时,可能是因为PostgreSQL没有启动,而不是相反,PostgreSQL没有启动,因为目录丢失了。