V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
oooolongtea
V2EX  ›  NGINX

MacOS - brew 里运行 nginx 和直接运行 nginx ,有什么区别吗?

  •  
  •   oooolongtea · 2021-11-01 23:17:22 +08:00 · 2342 次点击
    这是一个创建于 878 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在做一个项目,要用 nginx 做一个中间桥梁。

    我试了 sudo brew services start nginx ,这个没让项目跑起来。brew services list 显示 nginx 的 status 是 error 。

    于是我直接跑 nginx ,在 ps -ef | grep nginx 中也可以看到 nginx 跑起来了。我再试了一下项目,发现项目跑起来了。

    我想知道这两种跑的方式有什么区别吗?我搜了一下没搜到什么有用的信息。
    6 条回复    2021-12-22 22:28:34 +08:00
    clague
        1
    clague  
       2021-11-01 23:54:17 +08:00 via Android
    我觉得你看日志就行了
    0superx0
        2
    0superx0  
       2021-11-01 23:59:40 +08:00
    个人了解,相当于 ubuntu 的 apt 跟 dpkg 的区别...
    Kobayashi
        3
    Kobayashi  
       2021-11-02 00:29:31 +08:00   ❤️ 2
    你没说清楚直接跑 nginx 用的什么命令。不过好像这并不重要。

    区别

    - brew: launchd 管理前台进程 nginx -g daemon off; 也就是类似于 systemd (毕竟 systemd 参考了 launchd )
    - 你自己运行: nginx. nginx 自行管理进程(后台)

    我觉得可能问题不在于这 2 个命令,而在于权限(执行权限和配置、日志等权限)。brew services 不支持 root (会有副作用,等下讲)。有些服务监听在小于 1024 端口,需要 root 权限。

    brew services 创建用户级别 LaunchAgent (~/Library/LaunchAgents )。sudo brew services 创建系统级别 LaunchDaemon (/Library/LaunchDaemons )。

    HOMEBREW_PREFIX (/usr/local for x86, /opt/homebrew for arm64 )下文件权限是 $USER:staff 。sudo brew services nginx 会修改 nginx 相关文件权限为 root:admin 。之后的 brew update 等命令由于无法访问 root:admin 权限的文件,从而执行报错。

    所以,sudo brew services 不是不可以使用,但每次你使用过后应该修复文件权限。

    # For x86 Mac
    sudo chown -R "$(whoami):admin" /usr/local/*
    # For M1 Mac
    sudo chown -R "$(whoami):admin" /opt/homebrew/*

    (可以用 find 优化一下)

    结论 /使用策略:使用 Homebrew 时,能避免 sudo 就别用,如 监听在 3306 的 MySQL ,这端口完全可以用普通用户权限监听。Nginx (80, 443), dnsmasq unbound (53) 可以用 sudo brew services ,但记得修复文件权限。
    dingwen07
        4
    dingwen07  
       2021-11-02 06:24:58 +08:00 via iPhone
    @0superx0 #2 感觉更像是 systemd 和直接运行的区别吧
    julyclyde
        5
    julyclyde  
       2021-11-02 12:22:27 +08:00   ❤️ 1
    brew services 是托管给 launchd 的,相当于系统服务。和 linux 里 systemd 类似。都是定义了后台服务的生命周期和状态的

    你手工运行那个,就仅仅是一个进程而已
    kingxiangqi
        6
    kingxiangqi  
       2021-12-22 22:28:34 +08:00
    @Kobayashi #3 这个问题应该已经被修复了?
    https://github.com/Homebrew/homebrew-services/pull/188
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5400 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:58 · PVG 16:58 · LAX 01:58 · JFK 04:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.