发表于: 2017-11-01 20:49:57
0 858
今天做的事:
今天处理了昨天的遗留问题:服务的日志分布问题;前端代码部署问题。
首先是服务日志,这个其实就更改程序中log4j日志中的路径就可以。但是每次部署服务,更新代码什么的很麻烦,就写了一个脚本,命令堆叠,完成更新部署,自测了一下,还挺好用的。
之后发现之前copy的脚本有待完善,然后就加了点东西,免不了要学点东西:
首先是linux下if语句的使用;
使用的格式:
if [];then
code
elif [];then
code
else
code
fi
使用了一个参数-n 用来判断参数是否为空,贴一下
[]里面的条件判断。
1 字符串判断
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
2 数字的判断
int1 -eq int2 两数相等为真
int1 -ne int2 两数不等为真
int1 -gt int2 int1大于int2为真
int1 -ge int2 int1大于等于int2为真
int1 -lt int2 int1小于int2为真
int1 -le int2 int1小于等于int2为真
3 文件的判断
-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
3 复杂逻辑判断
-a 与
-o 或
! 非
时间有限,没有一一去试。
这里在测试参数的时候有个报错
这是因为参数没有做好引用
由
if [ -n $SIGN ]
改为
if [ -n "$SIGN" ]
问题解决
然后解决了脚本问题,开始给前端部署代码,今天具体看了一下问题,有个js文件报了502的错误,然后百度了一下,最后结合之前师兄的配置文件,加上自己瞎猜,估计是静态资源的加载问题,所以就在Nginx配置中配置了静态资源的加载,使用了正则表达式,果然这玩应很重啊,有时间一定得好好学学。
添加内容就很短的东西。
location ~ .*.(js|css)$
{
root filepath;
allow all;
}
然后就搞定了。。。
这里~表示后面是一个正则表达式,相当于一个标识符
.代表任意字符
*代表重复多次
后面那个.是文件后缀带的那个点
|代表选择,就是或
$代表的是字符串结束
期间遇到304状态码,并不是报错,这是表示资源没有变化,有缓存影响,可以使用ctrl+F5强制刷新。
虽然看起来没什么东西,但是做出来还是花了几个小时。。。
之后在写脚本的时候发现了一个问题,就是脚本中的最后的cd命令不起效,然后百度,发现了新大陆。
虽然我在脚本最后一行使用了
cd /
但是脚本运行完毕还是在脚本的当前路径下,没有变化,这里使用的是./*.sh命令使用的
之后百度,发现使用. *.sh命令可以完成cd切换路径,这里需要解释一下,.相当于source命令,可以说是别称把。
这里解释为什么两种执行方式会出现差异。
首先,./*.sh执行脚本必须要有相应的文件权限,否则无法运行;而使用source(也就是.)不需要文件权限。
其次,source执行脚本,是在当前脚本进程下执行的,所以,使用source执行脚本,就是纯粹的命令堆叠,什么命令都和手敲没什么区别。
但是使用./*.sh的方式执行脚本,是在当前脚本进程下创建了一个子shell运行脚本,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
这就好比,你的脚本执行后,脚本本身有对应的PATH变量,用来保存你现在的当前路径,然后它有新建一个子shell,来执行你在脚本中写的命令,操作都可以正常运行,然后子shell运行最后一句cd,之后子shell结束,回到父shell,然后父shell通过PATH变量回到你的脚本所在路径,父shell结束,最后整个脚本运行完毕。(不知道理解是否有误,这块有点绕,刚开始没读懂)
现在所有服务器部署之类的也都做完了,也优化完善了,终于可以开始开发了,呼~
明天计划:写接口。
问题:都已解决,接下来的时间熟悉一下自动生成的代码,为明天开发做准备。
收获:收获了一堆linux上的知识,外加一点Nginx加载静态资源涉及的正则表达式,主要获得的都是脚本知识。。。
评论