Skip to content

A series of shell script tool. 一系列安装脚本,支持一键安装Git、bash-support、mysql和redis等。另外提供了Dump脚本,用于故障备份。

Notifications You must be signed in to change notification settings

roc-wong/shell-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 

Repository files navigation

shell-tools

常用shell脚本工具箱,提供一键安装、故障备份等功能。

一键安装

xpress_install目录下的脚本提供一键安装的功能,支持如下软件安装:

  1. Git
  2. Redis
  3. Bash-support

使用方式

1. 命令行直接执行

最近在七牛CDN上传了下列安装脚本,可以直接执行命令进行安装:

## 安装bash-support
curl http://olml6iu96.bkt.clouddn.com/script/bash_support.sh -O && vi +':w ++ff=unix' +':q' bash_support.sh && sh bash_support.sh

## 安装Git
curl http://olml6iu96.bkt.clouddn.com/script/git.sh -O && vi +':w ++ff=unix' +':q' git.sh && sh git.sh && source /etc/profile

## 安装Redis
curl http://olml6iu96.bkt.clouddn.com/script/redis.sh -O && vi +':w ++ff=unix' +':q' redis.sh && sh redis.sh && source /etc/profile

vi +':w ++ff=unix' +':q' bash_support.sh 说明

我将脚本上传到七牛CDN后,下载后发现无法执行,提示shell syntax error: unexpected end of file,猜测是在上传过程中进行了转换,而本地Nginx却没有这个问题,为此只能修改文件format格式。

dos格式文件传输到unix系统时,会在每行的结尾多一个^M,即dos文件中的换行符“\r\n”会被转换为unix文件中的换行符“\n”,而此文件若是一个可执行文件的话,会导致此文件不能被执行。

## 使用vim

# vi exec.sh  
 :set ff=unix

#(或者)
 :set fileformat=unix   
# :wq

如果想在shell中直接调用,可以执行vi +':w ++ff=unix' +':q' ${file},但是要严格注意上面空格的位置,不能多不能少。

参考:

以Git安装为例,介绍两种安装方式。

2. 下载脚本后执行

下载后直接安装:

source xpress_install/git.sh

3. 二次加工,修改后执行(适用于局域网)**

由于Git源码下载速度较慢,可另行下载Git源码,将之与git.sh脚本放置于nginx静态目录中,修改git.sh脚本中Git源码的下载地址,以便在局域网中使用。

  • 1 修改git.sh文件中源码下载路径:
wget https://www.kernel.org/pub/software/scm/git/$GIT_VERSION.tar.gz 
  • 2 命令行执行:
例如:放置于IP:10.0.30.2的nginx静态目录中,直接在命令行执行:

sh -c "$(curl -s http://10.0.30.2/install/tools/git.sh)" && source /etc/profile

Git

安装版本:V2.9.5

安装目录:/usr/local/git

默认配置

git config --global alias.co "checkout"
git config --global alias.ci "commit"
git config --global alias.br "branch"
git config --global alias.st "status"
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --abbrev-commit"

Redis

安装版本:Redis 4.0.9

安装目录:/usr/local/redis-4.0.9,默认增加软链接: /usr/local/redis -> redis-4.0.9/

默认配置

redis.sh安装脚本默认执行了如下配置:

  1. redis.conf配置文件移动到/usr/local/redis/etc
  2. mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis/bin移动到/usr/local/redis/etc
  3. 后台启动redis服务,redis.conf -> daemonize yes
  4. 将redis添加到系统服务。启动脚本:/etc/init.d/redis
  5. 环境变量配置:/etc/profile.d/redis.sh

提醒配置

在安装过程中,如果出现红色字体的输出,表示建议进行的配置,但是脚本并未自动设置,需要手工配置。Redis.sh建议配置主要为内存分配策略。

内存分配策略

内核参数:overcommit_memory

可选值:0、1、2。

  • 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
  • 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
  • 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

什么是Overcommit和OOM

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。 当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。 当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。 每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。

修改配置/etc/sysctl.conf

vm.overcommit_memory = 1 

## 使之生效
sysctl -p 

Bash-support

bash-support 是一个高度定制化的vim插件,它允许你插入:文件头、补全语句、注释、函数、以及代码块。它也使你可以进行语法检查、使脚本可执行、一键启动调试器;而完成所有的这些而不需要关闭编辑器。

它使用快捷键(映射),通过有组织地、一致的文件内容编写/插入,使得bash脚本编程变得有趣和愉快。

插件当前版本是4.34.0 版本 重写了之前的3.12.1版本,4.0 及之后的版本基于一个全新的、更强大的、和之前版本模板语法不同的模板系统。

了解更多,请参考博客:如何用bash-support插件将Vim编辑器打造成编写Bash脚本的IDE

故障备份

troubleshoot目录下的脚本主要用户故障备份。

JVM Dump

每次线上环境一出问题,大家就慌了,通常最直接的办法回滚重启,以减少故障时间,这样现场就被破坏了,要想事后查问题就麻烦了,有些问题必须在线上的大压力下才会发生,线下测试环境很难重现,不太可能让开发或 Appops 在重启前,先手工将出错现场所有数据备份一下,所以最好在 kill 脚本之前调用 dump,进行自动备份,这样就不会有人为疏忽。 dump.sh的备份信息涵盖操作系统和JVM,主要用到的命令包括:jstack、jinfo、jstat、jmap、lsof、sar、uptime、free、vmstat、mpstat、iostat、netstat。

使用方式:"dump.sh -p jvm进程号"指定jvm进程进行备份,不使用-p参数时,默认查找tomcat用户对应的java进程。

About

A series of shell script tool. 一系列安装脚本,支持一键安装Git、bash-support、mysql和redis等。另外提供了Dump脚本,用于故障备份。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages