解剖 Nginx·自动脚本篇(7)类型相关脚本系列
- Author: Poechant
- Blog: blog.CSDN.net/Poechant
- Email: zhongchao.ustc#gmail.com (#->@)
- Date: March 12th, 2012
- Copyright © 柳大·Poechant
1 auto/types/sizeof
该脚本的功能,是通过测试程序获知给定的ngx_type
的大小。
1.1 显示提示信息
echo $ngx_n "checking for $ngx_type size ...$ngx_c"
cat << END >> $NGX_AUTOCONF_ERR
----------------------------------------
checking for $ngx_type size
END
1.2 生成计算ngx_type
的测试程序
cat << END > $NGX_AUTOTEST.c
#include <sys/types.h>
#include <sys/time.h>
$NGX_INCLUDE_UNISTD_H
#include <signal.h>
#include <sys/resource.h>
$NGX_INCLUDE_INTTYPES_H
$NGX_INCLUDE_AUTO_CONFIG_H
int main() {
printf("%d", sizeof($ngx_type));
return 0;
}
END
1.3 编译测试程序
首先生成编译的命令。
ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
-o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
注意-o $NGX_AUTOTEST
是生成可执行文件,然后执行编译。
eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
1.4 运行测试程序,得到ngx_size
如果NGX_AUTOTEST
文件存在且可执行,则设定ngx_size
大小。
ngx_size=
if [ -x $NGX_AUTOTEST ]; then
ngx_size=`$NGX_AUTOTEST`
echo " $ngx_size bytes"
fi
1.5 删除NGX_AUTOTEST
测试程序可执行文件
rm -f $NGX_AUTOTEST
1.6 设定整数最大值
分别处理 32 位系统的数据大小和 64 位系统的数据大小,设定整数最大值。其他情况作为错误处理。
case $ngx_size in
4)
if [ "$ngx_type"="long" ]; then
ngx_maxvalue=2147483647L
else
ngx_maxvalue=2147483647
fi
ngx_max_len='(sizeof("-2147483648") - 1)'
;;
8)
if [ "$ngx_type"="long long" ]; then
ngx_maxvalue=9223372036854775807LL
else
ngx_maxvalue=9223372036854775807L
fi
ngx_max_len='(sizeof("-9223372036854775808") - 1)'
;;
*)
echo
echo "$0: error: can not detect $ngx_type size"
echo "----------" >> $NGX_AUTOCONF_ERR
cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
echo "----------" >> $NGX_AUTOCONF_ERR
echo $ngx_test >> $NGX_AUTOCONF_ERR
echo "----------" >> $NGX_AUTOCONF_ERR
exit 1
esac
2 auto/types/typedef
通过两个循环,分别处理ngx_type
和ngx_types
。向objs/ngx_auto_config.h
文件写入typedef
定义。
2.1 生成测试程序
cat << END > $NGX_AUTOTEST.c
#include <sys/types.h>
#include <signal.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <netinet/in.h>
$NGX_INCLUDE_INTTYPES_H
int main() {
$ngx_try i = 0;
return 0;
}
END
2.2 编译测试程序
ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
-o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
2.3 设置ngx_found
值
if [ -x $NGX_AUTOTEST ]; then
if [ $ngx_try = $ngx_type ]; then
echo " found"
ngx_found=yes
else
echo ", $ngx_try used"
ngx_found=$ngx_try
fi
fi
2.4 删除测试程序可执行文件
rm -f $NGX_AUTOTEST
2.5 异常情况
if [ $ngx_found = no ]; then
echo $ngx_n " $ngx_try not found$ngx_c"
echo "----------" >> $NGX_AUTOCONF_ERR
cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
echo "----------" >> $NGX_AUTOCONF_ERR
echo $ngx_test >> $NGX_AUTOCONF_ERR
echo "----------" >> $NGX_AUTOCONF_ERR
else
break
fi
到此循环就结束了。然后:
if [ $ngx_found = no ]; then
echo
echo "$0: error: can not define $ngx_type"
exit 1
fi
2.6 将typedef
语句写入objs/ngx_auto_config.h
ngx_found
是原类型,ngx_type
是别名类型。
if [ $ngx_found != yes ]; then
echo "typedef $ngx_found $ngx_type;" >> $NGX_AUTO_CONFIG_H
fi
3 auto/types/value
这与auto/define
有些类似,但auto/define
表示“设置了 K 值,其值为 V”,与“没有设置 K 值”相对。而auto/types/value
是设置任意参数和其值。
cat << END >> $NGX_AUTO_CONFIG_H
#ifndef $ngx_param
#define $ngx_param $ngx_value
#endif
END
4 auto/types/uintptr_t
4.1 提示
echo $ngx_n "checking for uintptr_t ...$ngx_c"
echo >> $NGX_ERR
echo "checking for uintptr_t" >> $NGX_ERR
4.2 生成测试程序
cat << END > $NGX_AUTOTEST.c
#include <sys/types.h>
$NGX_INTTYPES_H
int main() {
uintptr_t i = 0;
return 0;
}
END
4.3 编译测试程序
found=no
eval "$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
if [ -x $NGX_AUTOTEST ]; then
echo " uintptr_t found"
found=yes
else
echo $ngx_n " uintptr_t not found" $ngx_c
fi
4.4 删除测试程序可执行文件
rm $NGX_AUTOTEST*
4.5 无可执行文件时的处理
if [ $found = no ]; then
found="uint`expr 8 \* $ngx_ptr_size`_t"
echo ", $found used"
echo "typedef $found uintptr_t;" >> $NGX_AUTO_CONFIG_H
echo "typedef $found intptr_t;" | sed -e 's/u//g' >> $NGX_AUTO_CONFIG_H
fi
-
转载请注明来自“柳大·Poechant的CSDN博客”:blog.CSDN.net/Poechany
-
相关推荐
**Nginx 一键安装与自动化脚本** 在IT行业中,服务器配置和管理是一项重要的任务,尤其是在处理Web服务时。Nginx是一款高性能的HTTP和反向代理服务器,以其高效、稳定和轻量级的特性而广受欢迎。本文将详细讨论如何...
Centos7系统自动安装nginx脚本, 由于每次安装新的环境如果需要 Nginx 的话都需要进行一次手动安装,为了减轻重复工作,书写自动安装 Nginx 安装脚本
nginx 自动化安装脚本,下载直接运行安装就可以,还集成了限制国家ip模块
ubuntu自动安装nginx php脚本ubuntu自动安装nginx php脚本
nginx配置修改后运行此脚本启动nginx。 其脚本的作用往往是简化了启动的便利
nginx自动化安装shell脚本
windows启动nginx脚本
这篇博客将深入探讨Nginx的启动脚本,了解其工作原理以及如何自定义和管理这些脚本。 【描述】:虽然没有提供具体的描述,但可以推测博客可能涉及了Nginx启动脚本的创建、使用和自定义过程。通常,Nginx的启动脚本...
`install_nginx-v2.sh` 脚本通常是为了简化 Nginx 的安装过程而编写的,它会自动完成下载、编译、配置和安装等步骤。这种自动化方式对于初学者或者需要快速部署环境的开发者来说非常方便,减少了手动操作的复杂性和...
linux安装nginx一键脚本(自己用过,完美可用),这个文件是nginx.sh,可以在linux的小黑框中,先上传到服务器自己想安装的目录,然后找到找到这个目录再找到这个文件,执行sh nginx.sh即可自动安装。
Nginx日志自动归档备份shell脚本log
7. **自动化脚本**:将以上步骤整合到一个名为`install_nginx.sh`的shell脚本中,通过赋予执行权限(`chmod +x install_nginx.sh`)并运行(`./install_nginx.sh`),即可实现自动化安装。 在这个压缩包文件"nginx-...
通过提供用户友好的界面,用户只需输入Nginx的版本号和部署目录,脚本即可自动完成从依赖库安装到Nginx服务启动的所有步骤。该脚本适用于基于YUM的Linux发行版 功能 记录日志:脚本中的每个关键步骤都会记录到日志中...
Nginx通过配置不同的站点来管理多个网站的运行,而“添加站点脚本”就是一种自动化创建和管理Nginx站点配置的工具。下面我们将深入探讨Nginx站点脚本的工作原理以及如何使用它。 ### 1. Nginx的基本概念 Nginx是一...
nginx一键安装脚本
**Nginx脚本详解** Nginx,作为一款高性能的HTTP和反向代理服务器,以其轻量级、高并发的特性在Web服务领域广泛应用。它不仅能够处理静态内容,还可以通过配置执行一些动态处理任务,例如使用脚本来实现自定义逻辑...
本教程将详细解释如何使用自动化脚本来一键生成Nginx所用的HTTPS PEM格式证书,并适用于不同环境。 首先,我们要理解PEM(Privacy Enhanced Mail)格式,它是公钥证书的一种常见表示方式,以Base64编码,并被包裹在...
如果服务器中nginx挂掉,我们如何第一时间启动它...该脚本定时检测nginx状态,挂机自动重启nginx。 如果服务器中nginx挂掉,我们如何第一时间启动它?人工重启?no。 该脚本定时检测nginx状态,挂机自动重启nginx。
检测网站状态并自动重启Nginx服务的脚本通常用于服务器管理中,当网站不可访问时(比如网页加载超时或者返回错误码),该脚本可以定期检查网站的响应情况。这个过程一般包含以下几个步骤: 1. **监控脚本**:编写一...