【问题标题】:Brew Postgresql Starts But Process Is Not RunningBrew Postgresql 启动但进程未运行
【发布时间】:2021-08-13 17:54:58
【问题描述】:

我在 Mac 上通过 Brew 安装了 Postgres。然后,我尝试启动它

| => 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   

感谢任何有关如何解决此问题的帮助。

【问题讨论】:

    标签: postgresql macos homebrew psql


    【解决方案1】:

    与 Linux 中的内置 pkg 管理器不同,macOS 上的 Homebrew 在大多数 brew 命令期间不需要 root 权限。唯一的例外是sudo brew services,当您在端口

    回答你的问题:你用sudo brew services弄乱了文件权限。

    该解决方案适用于 x86 Mac。我没有在 M1 mac 上测试过。 (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 -> psql 13 进行 db 迁移,详情请查看 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 不能以 root 身份启动,但 Homebrew 和 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 不够聪明,无法自动将文件的 onwer bach 更改为 $USER

    我为此编写了一个脚本:brew-fix-perm。但在你的情况下,这还不够。您必须改回$(brew --prefix)/var/postgres 下的 postgres 配置文件的所有权。这就是我输入sudo chown -R $USER:admin $(brew --prefix)/*的原因。

    相关答案

    我认识一个固执的家伙坚持使用sudo brew services 来启动mysql。关于brew services 的更详细的答案是there。你可能想要一张支票。

    【讨论】:

    • 非常感谢sudo chown -R $USER:admin $(brew --prefix)/*为我工作。我的用户名是promisepreston,我刚刚跑了sudo chown -R promisepreston:admin $(brew --prefix)/*
    【解决方案2】:

    简答:

    brew services stop postgresql
    sudo chown -R $(whoami) $(brew --prefix)/*
    brew services start postgresql
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多