有人,请,请,请向我解释这到底发生了什么,以及我该如何解决这个问题?
我会让我的控制台说话:
root@worker2:/var/run# service postgresql start
* Starting PostgreSQL 9.3 database server * The PostgreSQL server failed to start. Please check the log output:
2016-01-15 10:47:08 PST FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock": Permission denied
[fail]
root@worker2:/var/run# chmod 777 postgresql
root@worker2:/var/run# ls -l |grep post
drwxrwsrwx 2 postgres postgres 40 Jan 15 10:24 postgresql
root@worker2:/var/run# chmod g-s postgresql
root@worker2:/var/run# ls -l |grep post
drwxrwxrwx 2 postgres postgres 40 Jan 15 10:24 postgresql
root@worker2:/var/run# service postgresql start
* Starting PostgreSQL 9.3 database server * The PostgreSQL server failed to start. Please check the log output:
2016-01-15 10:47:48 PST FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock": Permission denied
[fail]
root@worker2:/var/run# ls -l |grep post
drwxrwsr-x 2 postgres postgres 40 Jan 15 10:24 postgresql
答案1
我遇到了完全相同的问题。我仍然不知道是什么原因造成的,但作为一种解决方法,我更改了 postgresql pid 文件目录和 unix 套接字目录(尽管前者可能没有必要)。我将/pg_workaround
在此答案中调用这个新目录。
mkdir /pg_workaround
chown postgres:postgres /pg_workaround
chmod 777 /pg_workaround
然后编辑/etc/postgresql/<version>/main/postgresql.conf
并修改以下几行:
external_pid_file = '/pg_workaround/<version>-main.pid'
unix_socket_directory = '/pg_workaround'
(/pg_workaround
用所需位置和<version>
实际的 postgres 版本替换。)
答案2
检查 /var/run/postgresql 的所有者,如果尚未将其设置为 postgres,请键入
sudo chown -R postgres:postgres /var/run/postgresql**
如果你运行的用户没有 sudo 权限,那么
1)更改为 root
苏
2)将 /var/run/postgresql 的所有权更改为 postgres 用户和 postgres 组
chown -R postgres:postgres /var/run/postgresql
我在 Ubuntu 14.04 上安装 postgres 时遇到了同样的问题,更改所有权后问题就解决了。
答案3
这通常是 VPS 上的错误导致的,因为 OS 和共享内核不同。解决方法:创建一个 cronjob,在每次重启时修复它,如下所示:
@reboot chown -R postgres:postgres /var/run/postgresql
有关此问题的更多详细信息:由于缺少 /var/run/sshd,SSH 服务器在重启后停止工作