体系版别:MacOS Ventura 13.3

Nginx服务发动失利问题描绘:

MacOS体系晋级导致brew发行包Nginx服务Service无法发动或发动失利,提示隐私或权限问题,体系约束root用户运转。

解决方案

此脚本用于解决MacOS晋级新版后,基于Homebrew发行的Nginx包看护服务无法发动运转问题。
此问题一般由MacOS更新的权限隐私策略与nginx看护服务权限抵触导致服务无法发动。该脚本通过直接操作nginx服务进程实现服务的快捷管理,添加常用进程根底检查操作,封装快捷操作脚本。

ljq@GitHub

Homebrew安装nginx:

brew install nginx

主张封闭Nginx服务开机发动,改为手动开启服务(重启机器后会brew发动服务会触发隐私权限):

# 取消brew service nginx 开机发动加载
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

macos_nginx_brew_service.sh

#!/usr/bin/env bash
# Author: Jack Liu
# Date Time: 2023-04-07 20:06
# Site: https://github.com/ljq
# Blog: https://www.defense.ink
# Email: ljqlab@163.com
# Description:  The nginx distribution provided by hombrew daemon service shortcut script.
# help info
USEAGE="[usage]: [-s | s | status] [start | restart | reload | stop] [-h | -help | --help] [-v | -V | --version]"
HELP_INFO=$(cat <<EOF
[help information]
Description:  
    This script is used to resolve the problem that the Homebrew-based Nginx package 
    daemon service cannot be started after the new version of MacOS is updated. This 
    problem is usually caused by the conflict between the permission privacy policy 
    updated by MacOS and the permission of the nginx daemon service. This script 
    manages the service by directly manipulating the nginx service process.
Command usage:
    -v|-V|version: Show current nginx version information.
    -h|-help|--help: Show help info.
    -s|s|status: Nginx process status.
    start|restart|reload|stop: Service operation.
EOF
)
# set variables
sh_file=$0
argv1=$1
nginx_conf_file=$(brew --prefix)/etc/nginx/nginx.conf
nginx_bin=$(brew --prefix nginx)/bin/nginx
# main
# description
if [ "$argv1" = "" ]; then
	echo -e "[brew's nginx service shortcut script]\n"
fi
# initialization check
if [ ! -x "$(command -v brew)" ]; then
	echo -e "[WARNING] Homebrew is not installed."
	exit
fi
if [ ! -f "$nginx_bin" ]; then
	echo -e "[WARNING] The version of nignx provided by homebrew is not installed."
	exit
fi
if [ ! -f "$nginx_conf_file" ]; then
        echo -e "[WARNING] The nignx.conf file provided by homebrew is not exist."
        exit
fi
# nginx config check
chk_status=$(${nginx_bin} -t 2>&1)
if [[ $chk_status =~ "syntax is ok" ]] && [[ $chk_status =~ "test is successful" ]]; then
	#echo -e "[INFO] The nginx.conf syntax is ok.\n"
	echo ""
else
	echo -e "[ERROR] The nginx.conf syntax is incorrect."
	exit
fi
# exec
case "$argv1" in
	"-v"|"-version"|"--version"|"-V")
	  ${nginx_bin} -V
	  ;;
	"-s"|"s"|"status")
	  serv_process=$(ps -ef | grep nginx | grep -v "grep\|${sh_file}")
	  if [ "$serv_process" = "" ]; then
		echo -e "[NOTICE] Nginx service status is stoped.\n"
	  else
	  	echo -e "[NOTICE] Nginx service status is running.\n"
	  fi
	  ;;
	"start")
	  serv_process=$(ps -ef | grep nginx | grep -v "grep\|${sh_file}")
	  if [ "$serv_process" = "" ]; then
	    echo -e "[NOTICE] Nginx service is starting ...\n"
	    ${nginx_bin} -c $nginx_conf_file
	  else
	  	echo -e "[WARNING] Nginx service is already running. Do not repeat operation.\n"
	  fi
	  ;;
	"restart")
	  echo -e "[NOTICE] Nginx service is restarting ...\n"
	  ${nginx_bin} -s stop
	  ${nginx_bin} -c $nginx_conf_file
	  ;;
	"reload")
	  echo -e "[NOTICE] Nginx service is reloading ...\n"
	  ${nginx_bin} -s reload
	  ;;
	"stop")
	  ${nginx_bin} -s stop
	  echo -e "[NOTICE] Nginx service has stoped.\n"
	  ;;
	"-t")
	  ${nginx_bin} -t
	  ;;
	"-h"|"-help"|"--help")
	  echo -e "${HELP_INFO}\n" 
	  ;;
	*)
	  echo -e "[WARNING] Parameter is invalid or missing. Please run help command: ${sh_file} -h\n"
	  ;;
esac
exit

脚本使用案例

脚本添加可执行权限:
chmod +x macos_nginx_brew_service.sh
检查帮助:
./macos_nginx_brew_service.sh -h
常用操作
# 发动
./macos_nginx_brew_service.sh start
# 重启
./macos_nginx_brew_service.sh restart
# 状态
./macos_nginx_brew_service.sh status
# 重载
./macos_nginx_brew_service.sh reload
# 中止
./macos_nginx_brew_service.sh stop
# nginx 版别
./macos_nginx_brew_service.sh -V
参数阐明:
-v|-V|version: Show current nginx version information.
-h|-help|--help: Show help info.
-s|s|status: Nginx process status.
start|restart|reload|stop: Service operation.

macos_nginx_brew_service.sh

ljq@GitHub