macOS系统升级导致brew发行包Nginx服务Service无法启动或启动失败问题解决(MacOS Ventura 13.3)

macOS系统升级导致brew发行包Nginx服务Service无法启动或启动失败问题解决(MacOS Ventura 13.3)

macOS系统升级导致brew发行包Nginx服务Service无法启动或启动失败问题解决(MacOS Ventura 13.3)

系统版本:MacOS Ventura 13.3

Nginx服务启动失败问题描述:

MacOS系统升级导致brew发行包Nginx服务Service无法启动或启动失败,提示隐私或权限问题,系统限制root用户运行。

解决方案:

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

ljq@GitHub

Homebrew安装nginx:

1
brew install nginx

macos_nginx_brew_service.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/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

脚本使用案例

脚本增加可执行权限:
1
chmod +x macos_nginx_brew_service.sh
查看帮助:
1
./macos_nginx_brew_service.sh -h
常用操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动
./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


参数说明:
1
2
3
4
5
6
7
-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

MacOS English terminal Chinese garbled characters solution (MacOS英文环境终端中文内容乱码问题解决)

MacOS English terminal Chinese garbled characters solution (MacOS英文环境终端中文内容乱码问题解决)

Problem presentation

1
2
3
4
5
6
LANGUAGE = "en_US:en",
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"

warning: Falling back to a fallback locale ("en_US.UTF-8").

此问题常见于MacOS系统升级、OpenSSL升级后,terminal终端ssh远程链接时发出警告。

Solution

在MacOS本地终端:

1
sudo vi /etc/ssh/ssh_config

注释默认配置:

1
SendEnv LANG LC_*

重启终端即可。

References

参考

Eight Fallacies of Distributed Systems (分布式八大谬论)

Eight Fallacies of Distributed Systems (分布式八大谬论)

Eight Fallacies of Distributed Systems

The network is reliable

网络可靠。

Latency is zero

延迟为零。

Bandwidth is infinite

带宽是无限的。

The network is secure

网络是安全的。

Topology doesn’t change

拓扑不会改变。

There is one administrator

只有一个管理员。

Transport cost is zero

运输成本为零。

The network is homogeneous

网络是同质的。

GitHub以及其他GIT平台中启用GPG2认证基本使用流程(MacOS),增强身份识别和安全性

GitHub以及其他GIT平台中启用GPG2认证基本使用流程(MacOS),增强身份识别和安全性

base gnupg(version >= 2.1.17,版本gnupg已包含gpg-agent)

注意事项:gpg2默认交互式输入密码,有相应的解决方案。

brew install(推荐):
1
brew install gnupg
版本信息(截至2022.06.19)
1
2
3
4
5
6
7
gnupg: stable 2.3.6 (bottled)
GNU Pretty Good Privacy (PGP) package
https://gnupg.org/
/usr/local/Cellar/gnupg/2.3.6 (149 files, 13.3MB) *
Poured from bottle on 2022-05-04 at 00:14:15
From: https://mirrors.ustc.edu.cn/homebrew-core.git/Formula/gnupg.rb
License: GPL-3.0-or-later
Read more
Hexo cdn.jsdelivr.net A low cost solution for CDN invalidation(Hexo cdn.jsdelivr.net 等部分CDN引用无效的一种低成本解决方案)

Hexo cdn.jsdelivr.net A low cost solution for CDN invalidation(Hexo cdn.jsdelivr.net 等部分CDN引用无效的一种低成本解决方案)

原因:cdn.jsdelivr.net在2021年12月20号国内已经无法使用,导致部分引用此引用此cdn资源的hexo生成站点js依赖和错误页面功能异常。

临时低成本解决方案:

考虑到不同的hexo站点使用的插件各有不同,且引用的第三方js库存在差异,故考虑采用低成本的方式解决。大概思路是在生成的部分文件里,替换相应的站点域名,实现在deploy之前完成文件路径的转换。

Read more