This topic created in 1678 days ago, the information mentioned may be changed or developed.
最近在做一个项目,要用 nginx 做一个中间桥梁。
我试了 sudo brew services start nginx ,这个没让项目跑起来。brew services list 显示 nginx 的 status 是 error 。
于是我直接跑 nginx ,在 ps -ef | grep nginx 中也可以看到 nginx 跑起来了。我再试了一下项目,发现项目跑起来了。
我想知道这两种跑的方式有什么区别吗?我搜了一下没搜到什么有用的信息。
6 replies • 2021-12-22 22:28:34 +08:00
 |
|
1
clague Nov 1, 2021 via Android
我觉得你看日志就行了
|
 |
|
2
0superx0 Nov 1, 2021
个人了解,相当于 ubuntu 的 apt 跟 dpkg 的区别...
|
 |
|
3
Kobayashi Nov 2, 2021 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 ,但记得修复文件权限。
|
 |
|
5
julyclyde Nov 2, 2021 1
brew services 是托管给 launchd 的,相当于系统服务。和 linux 里 systemd 类似。都是定义了后台服务的生命周期和状态的
你手工运行那个,就仅仅是一个进程而已
|