BREW PostgreSQL启动,但进程未运行 [英] Brew Postgresql Starts But Process Is Not Running
问题描述
我已经在Mac上安装了Postgres Via Brew。然后,我尝试启动它
| => brew services restart postgres
Stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
之后,我检查进程是否正在运行
(base) ________________________________________________________________________________
| ~/ @ MacBook-Pro (user)
| => ps -ef | grep postgres
501 61568 561 0 5:00PM ttys000 0:00.00 grep postgres
此外,brew services
还会生成以下
| => brew services
Name Status User Plist
dnsmasq unknown root /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
emacs stopped
postgresql error root /Library/LaunchDaemons/homebrew.mxcl.postgresql.plist
postgresql@12 stopped
rabbitmq stopped
unbound stopped
我们非常感谢有关如何解决此问题的任何帮助。
推荐答案
与linux中内置的pkg管理器不同,在大多数brew
命令中,MacOS上的Homebrew不需要root
特权。唯一例外是sudo brew services
启动服务时侦听端口<;1024。
回答您的问题:您将sudo brew services
的文件权限搞乱了。
该解决方案适用于x86 Mac。我还没有在M1Mac上测试过它。(HomeBrew将相关文件存储在x86 Mac上的/usr/local
下,M1 Mac下的/opt/homebrew
下。)
### Run in Bash or Zsh
# Stop postgresql
sudo brew services stop postgresql
# In case service file is copied to ~/Library/LaunchAgents as well
brew services stop postgresql
# Fix permission of homebrew files
sudo chown -R $USER:admin $(brew --prefix)/*
# Remove socket like `/tmp/.s.PGSQL.5432`
# Restart postgresql without sudo
brew services start postgresql
除上述修复外,您可能还需要
- 从psql 12->进行数据库迁移,请查看
brew info postgresl
以了解详细信息 - 手动启动psql并检查启动日志
# Change /usr/local to /opt/homebrew on M1 Mac
# Check the start log
pg_ctl -D /usr/local/var/postgres start
# to stop it
pg_ctl -D /usr/local/var/postgres stop
sudo和BREW
我不是说postgresql
不能以根用户身份启动,但是brew services
和brew services
不是为与sudo
一起使用而设计的。
和sudo brew services
将某些文件的所有者更改为root
。你最好把它们换回属于你自己的。
这里有一个示例(请检查警告部分)
❯ sudo brew services start adguardhome
Warning: Taking root:admin ownership of some adguardhome paths:
/usr/local/Cellar/adguardhome/0.106.3/bin
/usr/local/Cellar/adguardhome/0.106.3/bin/AdGuardHome
/usr/local/opt/adguardhome
/usr/local/opt/adguardhome/bin
/usr/local/var/homebrew/linked/adguardhome
This will require manual removal of these paths using `sudo rm` on
brew upgrade/reinstall/uninstall.
Warning: adguardhome must be run as non-root to start at user login!
==> Successfully started `adguardhome` (label: homebrew.mxcl.adguardhome)
sudo brew services
不够智能,无法自动将文件的原始Bach更改为$USER
。
我已经为此编写了一个脚本:brew-fix-perm
。但在你的情况下,这是不够的。您必须在$(brew --prefix)/var/postgres
下更改Postgres配置文件的所有权。这就是为什么我把sudo chown -R $USER:admin $(brew --prefix)/*
。
相关答案
我知道有个顽固的家伙坚持用sudo brew services
来启动MySQL。关于brew services
的更详细的回答是there。您可能需要检查一下。
这篇关于BREW PostgreSQL启动,但进程未运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!