Centos7マシンをセットアップしていて、再起動後にpostgresが起動しないという問題があります。サービスを手動で実行しようとしても、
UTC FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock": No such file or directory
よく見ると、/var/run/postgresql
は、再起動後に存在するイベントではありません。
私の研究で明確な答えが見つからなかったので、いくつかの質問が本当にありました。
/ var/run内のディレクトリはいつどのように作成されますか?それは、サービスの開始時に作成されるものですか、それともその方法は何ですか?
この特定の問題が発生し、再起動後にpostgresが起動しない原因は何ですか?
私はこれまでにこの動作を見たことはありませんが、公平を期して私はこれまでほとんどubuntuを使用してきました。
ありがとう
システムで/var/run
を調べると、実際には/run
へのシンボリックリンクであることがわかります。
# ls -ld /var/run
lrwxrwxrwx. 1 root root 6 Jan 19 09:12 /var/run -> ../run
そして、/run
を調べると、実際にはtmpfs
マウントポイントであることがわかります。
# mount | grep /run
tmpfs on /run type tmpfs (rw,nosuid,nodev,seclabel,mode=755)
tmpfs
ファイルシステムはメモリ内ファイルシステムです。システムを再起動すると、そこにあるものはすべて消えます。 Federicoがコメントで述べているように、CentOS 7(およびFedora、RHEL 7など)はsystemd-tmpfiles
機能を使用して、システムの起動時にロックディレクトリやその他の一時的なストレージの場所などを自動的に作成します。
CentOS 7に含まれているpostgresql-server
パッケージは、すでに正しいことをしています。
# rpm -ql postgresql-server | grep tmpfiles
/usr/lib/tmpfiles.d/postgresql.conf
# cat /usr/lib/tmpfiles.d/postgresql.conf
d /var/run/postgresql 0755 postgres postgres -
サードパーティのpostgresqlパッケージを使用している場合でも、CentOSと正しく統合されていないことに驚かないでください。手動で修正するには、ここに示す同じtmpfiles.d
エントリを設定します。
Unix_socket_directories = '/ tmp'#ディレクトリのカンマ区切りリストをpostgresql設定ファイルに追加します。ファイルはどこかにあるはずです(RHEL 7.xおよびCentOS 7.x)
/var/lib/pgsql/9.5/data/postgresql.conf
または
/var/lib/pgsql/data/postgresql.conf
次にサーバーを再起動すると、postgresqlサービスが問題なく起動するはずです。