运维与shell脚本
运维工作内容
负载均衡GSLB
- 方式
- 轮询
- ip
- hash:这样的话由于hash值是一样的,那么服务器可以为用户做缓存
- 权重:按照服务器能力,权重
业务运营支持系统BOSS
- 例如:计费、结算
互联网数据中心(IDC):机房
互联网服务提供商(ISP):选电信还是联通
内容分发网络(CDN)
告警:
- 方法访问、日志
- 分类:业务、系统层(硬件)
shell
查看用户的shell
ubuntu默认用的是bash,可以通过sh切换到sh的shell(没有高亮显示)
- shell执行命令是
- shell 又叫命令解释器,可以一次执行好多命令
- 可以用()把命令包住执行,是用一个子进程来执行的;
- 是
- echo $?:表示上一个程序
Nginx配置
- main 配置
- event配置
- worker_rlimit_nofile 1024;最多能打开多少个文件(一个socket就是一个文件描述符)
- html 配置
- mime.types(多媒体类型): 定义各种格式后缀,是属于什么类型的;在mime.types文件里可以看到定义的各种类型
- application/octet-stream:定义了如果后缀名在mime.types里面没有的话(不能识别),就,按照字节(二进制)传输
- sendfile 默认on:设置直接从内核空间传给用户,不经过用户空间
- keepalive:0表示短连接
- gzip:是否压缩传输
- server 配置
- listen :监听端口
- root:根目录
- location:反向代理,
- upstream:负载均衡
标准输入输出
- 输入/输出重定向
a+,w+,r+(都是读写)
- a+:追加
- w+:覆盖
- r+:文件不存在,不创建
函数
-
传参方式跟C一样
-
Shell脚本中用#表示注释,相当于C语言的//注释。但如果#位于第一行开头,并且是#!(称为Shebang)则例外,它表示该脚本使用后面指定的解释器/bin/sh解释执行。如果把这个脚本文件加上可执行权限然后执行:
chmod a+x test.sh
./test.sh
- Shell会fork一个子进程并调用exec执行./test.sh这个程序,exec系统调用应该把子进程的代码段替换成./test.sh程序的代码段,并从它的_start开始执行。然而test.sh是个文本文件,根本没有代码段和_start函数,怎么办呢?其实exec还有另外一种机制,如果要执行的是一个文本文件,并且第一行用Shebang指定了解释器,则用解释器程序的代码段替换当前进程,并且从解释器的_start开始执行,而这个文本文件被当作命令行参数传给解释器。因此,执行上述脚本相当于执行程序
$ /bin/sh ./test.sh
-
以这种方式执行不需要test.sh文件具有可执行权限。
-
如果将命令行下输入的命令用()括号括起来,那么也会fork出一个子Shell执行小括号中的命令,一行中可以输入由分号;隔开的多个命令,比如:
$ (cd ..;ls -l)
- 和上面两种方法执行Shell脚本的效果是相同的,cd …命令改变的是子Shell的PWD,而不会影响到交互式Shell。然而命令
$ cd ..;ls -l
- 则有不同的效果,cd …命令是直接在交互式Shell下执行的,改变交互式Shell的PWD,然而这种方式相当于这样执行Shell脚本:
$ source ./test.sh
或者
$ . ./test.sh
- 用于算术计算,[]等价例如:
$ VAR=45
$ echo VAR+3))
nginx
正向代理(翻–墙)
- 可以隐藏客户端身份
反向代理
- Nginx 作用:
- 反向代理,
- 负载均衡,
- 静态资源服务器(所以建议主页做成静态的,直接放在Nginx上返回给用户)
- 帮助业务服务器管理非活跃链接(epoll)
- 理解