MacOS - brew 里运行 nginx 和直接运行 nginx ,有什么区别吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
oooolongtea
V2EX    NGINX

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

  •  
  •   oooolongtea 2021-11-01 23:17:22 +08:00 3019 次点击
    这是一个创建于 1447 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在做一个项目,要用 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     Solana     2576 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 04:07 PVG 12:07 LAX 21:07 JFK 00:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86