脚本 linux bash 使用 shell PowerShell、alibaba clound toolkit、 OpenSSH 、常见shell脚本

##linux bash 和 windows powershell 老旧的cmd (command)

一、 bash shell用途

运维命令:
linux bash:linux 使用bash 发布java项目、报警预告、监听文件并自动重启tomcat
windows powershell:如jenkins进行自动发布,微软新工具,主要版本 4.0(server 2012 R2), 5.0(server2016 或者 2019之后的 server 2012 R2 )
windows cmd: 老旧的windows脚本,基本不维护了
  1. 后缀.sh: linux bash 文件后缀,可以使用 intellij idea 进行编辑
  2. 后缀.bat: windows 老牌脚本 cmd 文件
  3. 后缀.PS1, windows 新潮 脚本文件 powershell, 用来适应云计算下的运维,已经开源,可以在 linux 使用。 强大的别名,可以 直接使用linux 命令。 为了和photoshop区别,只能起名后缀 ps1

参考: 1持续集成(CI)- 解放双手 - java开发使用Jenkins
参考: 快速学习Bash
参考: runoob bash
参考:alibaba《Cloud Toolkit User Guide》Cloud Toolkit 部署应用到 Windows 服务器Cloud Toolkit常见问题部署应用到 Windows 服务器

1. 重启tomcat shell 脚本

 文件名:tomcat-restart.sh
 执行方式如下,这两行可以一次性执行的
 sudo chmod 777 /usr/local/sh/tomcat-restart.sh;    
 sh /usr/local/sh/tomcat-restart.sh 
#!/usr/bin/env bash
## 1: 查看进程id,示例1
## echo `ps -ef | grep $CATALINA_HOME/bin/tomcat-juli.jar | grep -v grep | tr -s " "|cut -d" " -f2`f
## 1: 查看进程id,示例2
## echo `ps -ef | grep tomcat8-8081 | grep -v grep | awk '{print $2}'`

### 第一步找到服务器上面 tomcat的进程id, 并且杀掉 tomcat进程
PID=$(ps -ef | grep tomcat8-8081 | grep -v grep | awk '{print $2}')
#判断字符串是否存,-z 不存在
if [ -z "$PID" ];then
    echo Application is already stopped !!!! pid is empty
else
    echo pid = $PID is killed !!!!...
    kill $PID
fi


#远程sleep就执行失败,没反应了
#sleep 1

## 第二步 删除之前的日志
rm -rf /usr/local/tomcat8-8081/logs/*
rm -rf /usr/local/tomcat8-8081/bin/logs/mall/*
echo logs delete success !!!
#sleep 1

### 第三步 重新启动tomcat
## 启动.jar文件 示例
## nohup java -jar /root/javademo/javademo-0.0.1-SNAPSHOT.jar > nohup.log 2>&1 &
## 启动 .war文件 示例
sh /usr/local/tomcat8-8081/bin/startup.sh
#sleep 1
echo application startup dazer !!!!....

##最后我们需要的话,查看日志
##tail -f /usr/local/tomcat8-8081/logs/catalina.out
##tail -f /usr/local/tomcat8-8081/bin/logs/mall/mall_business.log
##tail -f /usr/local/tomcat8-8081/webapps/logs/mall/mall_business.log

####移动复制
#sleep 3
#echo 1
#echo 1
#echo i am move copy tomcat8-8081 war to tomcat8
#cp /usr/local/tomcat8-8081/webapps/mall.war /usr/local/tomcat8/webapps/mall.war
#echo copy sucesss!!!

参考: 18个Linux Shell脚本经典案例

2. 检测目录、文件

我们使用 **inotifywait**,这个需要提前安装,
可以用来监听文件。比如解决目录同步、数据同步问题、防止挖矿病毒
前置条件:yum install inotify-tools -y
  1. linux服务器之间的文件同步;rsync+inotifywait;同步多个目录
  2. inotifywait实现文件监控
  3. 如何利用 inotifywait 命令监控文件变化?
#!/bin/bash
# 同步两个目录的文件,  linux shell 脚本
MON_DIR=/usr/local/temp
inotifywait -mqr --format %f -e create $MON_DIR |\
while read files; do
   rsync -avz /usr/local/temp /usr/local/temp22
   #echo "$(date +'%F %T') create $files" | mail -s "dir monitor" [email protected]
done

3. nginx 分割访问日志

Windows下nginx定时分割日志
文件名:nginx.split.sh
nginx默认的访问一个访问日志,但这个日志不会自动切割,所有 日志会非常大, 经常都上G了,对于查看日志 非常不方便。
sudo chmod 777 /usr/local/sh/nginx.split.sh;
sh /usr/local/sh/nginx.split.sh

#!/bin/bash
# 1: 先移动nginx现在的访问日志,删除老的访问日志
# 2: 给nginx 发送 kill 指令,让nginx 重新生成访问日志 acess.log
# nginx.split.sh

LOG_DIR=/usr/local/nginx/logs
YESTERDAY_TIME=$(date -d "yesterday" +%F)
LOG_MONTH_DIR=$LOG_DIR/$(date +"%Y-%m")
LOG_FILE_LIST="access.log"

for LOG_FILE in $LOG_FILE_LIST; do
    [ ! -d $LOG_MONTH_DIR ] && mkdir -p $LOG_MONTH_DIR
    mv $LOG_DIR/$LOG_FILE $LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME}
done

# cat 动态获取 nginx 的进程id,可能位置有变化; 这里特指主进程编号。
# kill -USR1 $(cat /var/run/nginx.pid)
kill -USR1 $(cat  /usr/local/nginx/logs/nginx.pid)

4. mysql数据库定期备份

Windows下MySQL数据库备份计划
文件名:mysql_backup.sh
nginx默认的访问一个访问日志,但这个日志不会自动切割,所有 日志会非常大, 经常都上G了,对于查看日志 非常不方便。
sudo chmod 777 /usr/local/sh/mysql_backup.sh;
sh /usr/local/sh/mysql_backup.sh
mysql分库分表备份

#!/bin/bash
# mysql自动备份功能
DATE=$(date +%F_%H-%M-%S)
HOST=localhost
USER=root
PASS=root007xX
BACKUP_DIR=/data/db_backup
# egrep 是排除
DB_LIST=$(mysql -h$HOST -u$USER -p$PASS -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")

for DB in $DB_LIST; do
    BACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql
    ## 说明 /dev/null 是空设备,像一个垃圾桶,任何不要的东西都放进去。当然也可以变成自己的文件
    BACKUP_LOG_NAME=/usr/local/sh/db_error.txt
    if ! mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>$BACKUP_LOG_NAME; then
        echo "$BACKUP_NAME 备份失败!,请自行执行,查看错误日志"
   else
    	# 进行压缩成.zip
    	cd ${BACKUP_DIR};
    	zip ${DB}_${DATE}.sql.zip ${DB}_${DATE}.sql;
    	rm -rf $BACKUP_NAME
   fi
done

5. 配置linux发送邮件功能

 服务器监控的时候进行要用到报警通知,这里先来配置一下centos上面的邮件
 这里按照mailx
 mailx类似Foxmail是一个邮件客户端
 centos7 使用指定邮箱发送邮件 https://www.cnblogs.com/benjamin77/p/8571902.html
 ss   -tnl: 查看主机上面的25端口是否在监听;
 前置条件:端口,如25、465发送端口一定要能访问到外面; aliyun 服务器处于反垃圾邮件的初衷关停了25号端口。
  telnet smtp.163.com 465
  telnet smtp.163.com 25  如果在服务器上面访问不了,就换其他端口把
#!/bin/bash
# yum install mailx -y
# 最后面添加如下,配置;这里通过163邮箱配置举例。其他邮箱服务器,请跟进情况设置
# 163邮箱配置  163邮箱--设置---pop3/smtp/imap
# qq邮箱配置
# 阿里云邮箱配置  https://mailhelp.aliyun.com/freemail/detail.vm?knoId=5869705
# vi /etc/mail.rc
# 一排可以设置多个参数
# set smtp=smtp.163.com:25
# set smtp=smtp.163.com:465

set [email protected]
#set smtp=smtp.aliyun.com:25
set smtp="smtps://smtp.aliyun.com:465"
set [email protected] smtp-auth-password=7518479160.Ab.
set smtp-auth=login
set ssl-verify=ignore
# 为了解决阿里云主机, 25端口不同的情况,这里只能使用ssl的端口了
set nss-config-dir=/root/.certs

配置完成,我们测试一下发送邮件, 由于阿里云发垃圾邮件策略,25号端口被关停了。我们只能使用ssl端口了

#这里生成阿里云邮箱的ssl证书
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.aliyun.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
# 如果使用生成的证书一直报错,但是可以发送出去邮件,就不用处理
# 使用管道符|传递发送内容你通过
echo "this is test mail info"|mail -s "monitor" [email protected]

如果配置完成,还有问题,参加 Linux Mailx 邮件安装配置及8大常见问题

6. 检测网站是否正常

 文件名:website_monitor.sh
 sudo chmod 777 /usr/local/sh/website_monitor.sh;    
 sh /usr/local/sh/website_monitor.sh
 这里通过定时器进行检查网站是否正常,给管理员发送邮件
#!/bin/bash
# /usr/local/sh/website_monitor.sh
#一个网站访问三次,三次都是失败,就发送警告邮件给管理员
URL_LIST="https://shop.dfww.com.cn/bobo/login.html https://www.jl-media.cn/hiber/login.html www.baidu.com"
for URL in $URL_LIST; do
    FAIL_COUNT=0
    for ((i=1;i<=3;i++)); do
        HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)
        if [ $HTTP_CODE -eq 200 ]; then
            echo "$URL OK"
            break
        else
            echo "$URL retry $FAIL_COUNT"
            let FAIL_COUNT++
        fi
    done
    if [ $FAIL_COUNT -eq 3 ]; then
        echo "Warning: $URL Access failure!"
        echo "Warning: $URL Access failure!"|mail -s "monitor" [email protected]
    fi
done

7. 定期清理无用的备份或者日志,防止磁盘撑满

 文件名:delete_file.ps1 清理windows日志。
#delete old tmp files,just save files in 15 days~
#windows 使用powershell 定时删除日期文件或者过时备份文件
#定时任务也可以直接通过powershell添加,见下面链接
$TimeOutDays=10    
$filePath="C:\soft\script\db_backup"     
$allFiles=get-childitem -path $filePath     
foreach ($files in $allFiles)     
{       
   $daypan=((get-date)-$files.lastwritetime).days       
   if ($daypan -gt $TimeOutDays)       
   {         
     remove-item $files.fullname -Recurse -force       
    }     
}

参考: 1使用powershell删除指定日期前的文件并添加到计划任务
参考: 18个Linux Shell脚本经典案例

二、 微软powershell

1. powershell是什么

微软早期的脚本文件是cmd 批处理bat文件,微软好多年都不更新, 取之代之 是 powershell。windows server R2 是4.0、windows server 2016是5.0。
windows 7是3.0, windows 8是4.0
支持DOC命令
如果命令提示符前面显示:**ps**,恭喜你就在使用powershell 了
  1. powershell教程网站
  2. microsoft PowerShell官网文档、示例代码
  3. Windows PowerShell ISE 集成脚本环境
  4. PowerShell 查看版本
  5. Windows PowerShell:管理服务器 启动关闭
  6. Powershell快速入门(一) 安装和使用

2. 常见命令

常见命令在powerShell中。
  1. Get-Host查看ps版本,现在的windows 2012R2 基本都是 powershell 5.0+了
  2. Get-Alias查看所有别名,比如:lslinux、dir cmd 命令 你会发现竟然能使用
  3. Get-Command获取所有的函数、获取所有命令行Get-Command -CommandType AliasGet-Command -CommandType Function

3. PS支持的四种命令类型

四种命令类型
  1. cmdlet命令行
  2. alias别名,部分DOC命令和linux都是别名
  3. function函数组合多个命令,组合成函数
  4. application可以执行运行应用程序,如:notepad

4. PS帮助系统

使用常用的帮助系统命令类型
  1. 帮助系统man,比如要查看man ls命令 或者 Get-Help cp, ls - dir - 、cp – Copy-Item - copy、
  2. Get-Command ls查看命令的原始命令, 这里查看ls 这个别名在powershell的原始命令, 查看该命令的详细信息Get-Command ls | fl *; 、获取所有和文件相关命令Get-Command -Noun item*, path | select Name
  3. Get-Alias获取命令的原始命令,比如查看,ls、cp、man的原始命令 Get-Alias ls
  4. powershell常见命令大全 powershell命令大全
  5. 在官网查看命令的参数,如,我们查看 Get-Content cat tail

5. PS用过的命令,PSV5版本

#Copy-Item 'C:\ActTemp\a.txt' -Destination 'D:\soft\tomcats-8992\webapps\mall.war'  ##copy文件
#Remove-Item -Path 'C:\ActTemp\mall.md' -Force ;  ##remove 文件

#net stop Tomcat8992 ;  ##启动或者停止服务
#echo 'stop......'; 
#net start Tomcat8992; 
#echo 'start ....' ; 

##查看一个文件的内容,别名cat 类似 linux tail -f  ,这里别名 cat ,原始命令:Get-Content
cat  'D:\Program Files\tomcat8081\logs\mall\mall_business.log' -wait -encoding utf8 -Tail 400; ##-wait 每秒输出一次, 并制定格式防止中文乱码;并输出最后400行

###静默删除所有,类似shell rm -rf *
rm * -Recurse -Force  或者 Remove-Item * -Recurse -Force

创建 ZIP 压缩文件, PSV5+
Compress-Archive -Path D:\Tools -DestinationPath E:\Tools_bakcup.zip
解压 ZIP 包
Expand-Archive -Path E:\Tools_bakcup.zip -DestinationPath F:\Tools

###前端代码先上传zip、删除服务器zip、解压zip; 解压缩是PS5新增的
Remove-Item -Path 'D:\nginx-1.14.2\html\book' -Recurse -Force ;  ###静默强制删除zip,别名 del
Expand-Archive -Path 'D:\nginx-1.14.2\html\book.zip' -DestinationPath 'D:\nginx-1.14.2\html\'; ###解压缩

6. PS执行策略

经常执行powershell发现执行不了,那个是因为微软增加了脚本执行策略,
防止随意执行给用户造成的损失。
这行 策略查看:Get-ExecutionPolicy
查看该命令的所有帮助:Get-Help Set-ExecutionPolicy -full

power shell执行策略(ExecutionPolicy): 
Restricted——默认的设置, 不允许任何script运行
AllSigned——只能运行经过数字证书签名的script
RemoteSigned——运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名
Unrestricted——允许所有的script运行

7. Windows服务器如何使用powershell

经常执行powershell发现执行不了,那个是因为微软增加了脚本执行策略,
  1. 下载安装OpenSSH one 在 Windows 中的 OpenSSH
  2. 下载安装OpenSSH two , 使用openSSH, windows电脑可以和linux电脑使用通用的ssh方式进行连接管理。eg: 和linux一样命令行操作、ftp上传; 其他安装指南~~~Windows安装OpenSSH服务; https://github.com/PowerShell/Win32-OpenSSH/releases页面进行下载OpenSSH-Win64.zip
  3. 配置openSSH的根目录,可以访问账号等 windows openssh 设置root 目录
  4. 设置注册表 regedit 把默认的 shell 默认shell 从cmd => powershell Windows 支持 OpenSSH 了! 搜索 ”DefaultShell“;建议使用powershell 命令, 一行代码直接 添加,免的要在regedit注册表里面找好一会。 管理员身份运行powershell 执行 > New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
  5. FAQ: 该了配置文件,发现不起作用;需要卸载openSSH,重新安装就生效了
  6. 安装完毕,查看端口号22是否已经开始监听:netstat -an | findstr :22
  7. 服务器上面测试一下,第一:检查ssh是否可以连接、第二:检查ssh使用的shell是cmd还是powershell ssh administrator@localhost 然后输入密码,就可以了
发布了112 篇原创文章 · 获赞 85 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/ab601026460/article/details/97375956