##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
#alibaba_Cloud_Toolkit_tomcat-restart
#适用于alibaba cloud toolkit 自动发布,这里重启linux tomcat脚本## 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" ];thenecho Application is already stopped !!!! pid is empty
elseecho 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. 检测目录、文件夹实时同步

2.1: linux centos 7+ 同步文件夹

2.1.1 同步同一台服务器上的两个文件夹
我们使用 **inotifywait**,这个需要提前安装,【监听】
可以用来监听文件。比如解决目录同步、数据同步问题、防止挖矿病毒
前置条件:yum install inotify-tools -y我们使用 **rsync** 这个也需要提前按照,我们进行安装和启动【同步】yum -y install rsyncsudo rsync --daemon --config=/etc/rsyncd.confecho 'rsync --daemon --config=/etc/rsyncd.conf' >> /etc/rc.d/rc.local  #加入开机启动,监听873端口.
  1. inotifywait实现文件监控 - (有手工安装)
  2. 自己博客~~~如何利用 inotifywait 命令监控文件变化?
  3. rc.local 是否运行、systemctl status rc-localsystemctl restart rc-local
  4. rsync(一):基本命令和用法、rsync安装与使用
#!/bin/bash
# inotifiwait_rsync_dir.sh
# 同步同一台服务器的两个目录的文件,  linux shell 脚本
MON_DIR=/usr/local/tomcat85-8080/webapps/qcure/upload
# inotifywait 监控命令 -m: 监听、-r: 递归子目录、%f 只输入文件的名称、-e create 是监听创建事件、\ 是换行
# inotifywait close 参数,一直会执行,奇怪
inotifywait -mqr --format %f -e create,modify,attrib,access,open,close $MON_DIR |\
while read files; do# rsync 同步命令, 把 temp copy 到 temp22# rsync 也需要进行安装# rsync -avz /usr/local/temp /usr/local/temp22rsync -avz /usr/local/tomcat85-8080/webapps/qcure/upload/  /usr/local/qcureUploadRoot/upload/# 把创建日期、文件名称 ;一种是写入到文件、一种是发送给管理员邮件#echo "$(date +'%F %T') create $files"  >> file_mon.log#echo "$(date +'%F %T') create $files" | mail -s "dir monitor" xxx@163.com
done

当然,这个需要后台一直运行进行监听,最好加入到开机启动中或者制作成服务

  • 方式一:每次重启linux 需要 手工 运行一次, : nohup bash /usr/local/sh/inotifiwait_rsync_dir.sh &>/dev//null &、运行后检查一下是否运行成功 ps -ef |grep inotifiwait_rsync_dir.sh
  • 方式二:制作成后台服务,类似nginx 后台服务制作 和 tomcat 后台制作, 见自己的博客–linux按照软件,然后搜索tomcat.service 或者 nginx开机自启动查看博客; 使用命令 find / -name tomcat*.sevicefind / -name nginx.service 可以查看对应的服务命令,文件都会放到 /usr/lib/systemd/system/目录
  • 方式三:【推荐】通过 tail -f /etc/rc.d/rc.local 最后面添加上面1的命令,进行开机启动。注意,要对文件加入可执行权限,并进行检测,否则可能不执行的。chmod +x /etc/rc.d/rc.local
# /etc/rc.d/rc.local
# 找了编辑rc.local,执行完毕,需要授权执行权限: must run 'chmod +x /etc/rc.d/rc.local' to ensure
# `echo "nohup bash    /usr/local/sh/inotifiwait_rsync_dir.sh &>/dev//null  &" >> /etc/rc.local`
# `echo "nohup /usr/local/tomcat85-8080/bin/startup.sh  &" >> /etc/rc.local`、
# nohup bash /usr/local/tomcat/tomcat9/bin/startup.sh &> /dev/null &
# `echo "/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf" >> /etc/rc.local`
touch /var/lock/subsys/local.txt  #测试rc.local是否执行成功
nohup bash /usr/local/sh/inotifiwait_rsync_dir.sh &>/dev//null &  #执行备份脚本,或者其他启动就要执行的脚本,如 tomcat、nginx
nohup ntpdate   stdtime.gov.hk #开机自动校准时间,首先自己要在命令行执行一次,试一下。看是否OK
2.1.2 同步两台服务器上的两个文件夹
两台服务器之间相互数据同步。可以是被动推送、也可以是主动拉去。
1:一种是前台模式,需要收入对方服务的密码;
2:一种是后台模式 demon, 在 /etc/rsyncd.conf 配置 目标的映射路径,账号和密码。注意,如果是后台模式需要开通服务器的端口873;两个服务器之间都必须安装软件。需要在 目标服务器配置 rsyncd.conf
我们举例,A===>B
  • 两台服务器A、B都安装同步软件,rsync
  • 配置目标服务器B,vi /etc/rsyncd.conf,编辑内容如下
# vi /etc/rsyncd.conf
# 这里编辑目标服务器的 rsync的配置文件; 参考 Centos7 rsync守护进程上传文件失败  https://www.cnblogs.com/lvhanzhi/p/10277056.html
#
uid = root
gid = root
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false### 指定传输的账号和密码,这里我们为了简单,我们去掉
#auth users = rsync_backup
#secrets file = /etc/rsync.passwd
# 这个日志文件,QCURE项目没用多久,竟然高达到15G,这里我们每天删除一次。通过定时任务删除 rm -rf /var/log/rsyncd.log
log file = /var/log/rsyncd.log#####################################
[ftp]
comment = welcome to oldboyedu backup!
# 配置ftp这个模块的文件夹路径
path =  /usr/local/ftp
  • 两台服务我们开通 rsync 873两台服务器的端口。sudo netstat -ntlp查看端口是否监听

参考—Centos7 rsync守护进程上传文件失败, 解决目标服务器配置文件问题: /etc/rsyncd.conf
参考-- 视频 数据同步工具 - rsync视频课程 在51edu 上,有完整讲解,
参考-Rsync 故障排查整理

#!/bin/bash
# inotifiwait_rsync_dir_two_server.sh
# 同步两台服务器的两个目录的文件,  linux shell 脚本
# 前置条件,两个服务器要设置linux信任关系
# 最后一个/ 斜杠不要少
src=/data/db_backup/
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' -e close_write,delete,create,attrib,modify,access,open,close $src |\
while read file;do# 第一种 注意::和一个:意思完全不一样的; 两个冒号,表示b服务器的映射的一个目录(模块)。 命令亲测,可以,从A服务器的 /usr/local/sh copy 到 B服务器的 root用户下的 /usr/local/ftp/目录。 输入完成后,要手工输入B服务器密码。 【这里不需要873端口,通过的ftp 方式,需要账号、密码】## 注意,这里的 /usr/local/sh/ 和 /usr/local/sh 是不一样的。如果有斜杠,两个目录内部相同。没有斜杠,会把 sh目录放到 ftp目录下面。rsync -arzuq /usr/local/sh root@47.101.31.90:/usr/local/ftp/# 第二种 这种配置稍微麻烦; :: 后面跟着的是模块,模块在 目标机器定义;目标机器的密码也在目标机器配置文件定义,密码可以注释,不要密码配置。# [ftp]是目标服务器配置文件夹中配置的,模块名称,可以随便起名字。# 2.1 显示传输日志, 主动传输; 前提条件,看是否能 telnet对方B server;  telnet 101.132.189.38 873 ; 如果报错,注意查看 【@ERROR: 】后面的错误;  常见错误,见:上面参考 【Rsync 故障排查整理】rsync -avP /usr/local/sh 101.132.189.38::ftp/# 2.2 后台运行 rsync -arzuq $src 101.132.189.38::ftp/rsync -arzuq $src 47.52.240.121::ftp/ echo "  ${file} was rsynced" >>/usr/local/sh/rsync.log 2>&1done

2.2: windows powershell 同步

2.2.1: 同步两个文件夹
powershell的能力也很强,我们用powershell同步两个文件夹。
目前是只处理新增的,A 删除的,B 不会同步删除。
#!/powershell
# 文件名: powershell_async_dir_copy.ps1
# 这把a文件夹内容同步到b
#分别定义源、目标文件夹,注意大小写敏感;
$folder_a_path = "D:\powershell_test\a"
$folder_b_path = "D:\powershell_test\b"
#遍历源文件夹下所有文件
$folders_a = gci $folder_a_path -Recurse
foreach ($folder_a in $folders_a){#通过替换的方式,取目标文件的全路径名称$b = $folder_a.fullname.replace($folder_a_path,$folder_b_path) #判断目标文件是否存在,如果存在则先判断新旧If (test-path $b){#判断目标是否为目录,如果是目录则跳过,如果不跳过,则会创建一级空目录If (!((gi $b).PSIsContainer)){#判断目标文件、源文件的新旧情况,如果目标已存在文件的修改时间早于源文件,则重新拷贝覆盖If ((gci $b).lastwritetime -lt $folder_a.lastwritetime){copy-item $folder_a.fullname $b -force}}}#如果目标文件不存在,则直接拷贝Else{copy-item $folder_a.fullname $b}}
2.2.2: 监听一个文件夹文件变化情况
我们持续监听一个文件夹,当文件夹内有文件变化的时候,我们进行打印变化情况。
警告: File Created : 新建位图图像.bmp
警告: File Changed : 新建文本文档.txt
警告: File Deleted : 新建文本文档.txt
#! powershell
# 文件名:powershell_notify_start.ps1
# 定义要监控的文件夹,这个文件夹必须先存在。
$folder = 'D:\powershell_test\a'
# 定义每次监控的间隔时间,这时定义为1000毫秒,即1秒
$timeout = 1000
# 创建文件系统监视对象
$FileSystemWatcher = New-Object System.IO.FileSystemWatcher $folder
Write-Host ”按 CTRL+C 来退出对文件夹 $folder 的监控”
while ($true) {# 监控文件夹内的所有变化$result = $FileSystemWatcher.WaitForChanged('all', $timeout)if ($result.TimedOut -eq $false){# 当文件夹的内容变化时,发出警告提示Write-Warning ('File {0} : {1}' -f $result.ChangeType, $result.name)  #打印,警告⚠️日志信息到控制台Start-Process powershell -ArgumentList D:\powershell_test\powershell_async_dir_copy.ps1 #启动1的ps脚本,进行同步}
}
Write-Host '监控被取消.'
2.2.3: 监听和同步组合起来
我们这里第二脚本里面调用起一个脚本,就可以实现功能了。
Start-Process notepad.exe -ArgumentList D:\powershell_test\powershell_notify_start.ps1 #启动显式对话框,然后进行运行.. D:\powershell_test\powershell_async_dir_copy.ps1 #直接输入. ps1文件直接后台运行..\powershell_async_dir_copy.ps1  #相对路径,后台运行
2.2.4: 如果要开机启动,如何做
这个也简单,我们学习一下360软件,就可了。

打开 任务计划程序,可以看到很多系统的定时器 或者 开机启动的事件操作。或者查看定期清理无用的备份的博客

3. nginx 分割访问日志

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

#!/bin/bash
# 1: 先移动nginx现在的访问日志,删除老的访问日志
# 2: 给nginx 发送 kill 指令,让nginx 重新生成访问日志 access.log
# nginx.split.shLOG_DIR=/usr/local/server/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#移除老的access.logmv $LOG_DIR/$LOG_FILE $LOG_DIR/${LOG_FILE}.${YESTERDAY_TIME}#压缩日志成access gz格式 cd $LOG_DIR/ && gzip -f ${LOG_FILE}.${YESTERDAY_TIME}
done# cat 动态获取 nginx 的进程id,可能位置有变化; 这里特指主进程编号。
# kill -USR1 $(cat /var/run/nginx.pid)
kill -USR1 $(cat  /usr/local/server/nginx/logs/nginx.pid)

4. mysql数据库定期备份

Windows下MySQL数据库备份计划
mongodb 定时备份
文件名: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; doBACKUP_NAME=$BACKUP_DIR/${DB}_${DATE}.sql## 说明 /dev/null 是空设备,像一个垃圾桶,任何不要的东西都放进去。当然也可以变成自己的文件BACKUP_LOG_NAME=/usr/local/sh/db_error.txtif ! mysqldump -h$HOST -u$USER -p$PASS -B $DB > $BACKUP_NAME 2>$BACKUP_LOG_NAME; thenecho "$BACKUP_NAME 备份失败!,请自行执行,查看错误日志"else# 进行压缩成.zipcd ${BACKUP_DIR};zip ${DB}_${DATE}.sql.zip ${DB}_${DATE}.sql;rm -rf $BACKUP_NAMEfi
done

5. 配置linux发送邮件功能

 服务器监控的时候进行要用到报警通知,这里先来配置一下centos上面的邮件这里安装【**mailx**】mailx类似Foxmail是一个邮件客户端centos7 使用指定邮箱发送邮件 https://www.cnblogs.com/benjamin77/p/8571902.htmlss   -tnl: 查看主机上面的25端口是否在监听;前置条件:端口,如25、465发送端口一定要能访问到外面; aliyun 服务器处于反垃圾邮件的初衷关停了25号端口。 一般都是入方向,这里是出方向telnet smtp.163.com 465telnet 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
# 可以设置多个账号,多个账号用 `acount 账号名称 {}`进行包裹,单个账号去掉这一层包裹就OK了。
# echo "this is test mail info"|mail -A aliyun -v -s "monitor" 601026460@qq.com
#      ------邮件内容----------
#                 ------ -A 指定发件account,没有account直接写的账号配置去掉该参数,可选--
#                 ------ -v 打印发送的信息log,可选---
#                 ------ -s subject或者叫做title,指定发件标题,可选---account aliyun {
# `account aliyun {}` 可选,只有一个发件账号,这个结构可以删除set smtp=smtps://smtp.aliyun.com:465#set smtp=smtp.aliyun.com:25  #25端口被云主机服务商封,只能改成ssl的端口,普通端口,不要添加 set smtp-auth=loginset smtp-auth-user=duandazhi@aliyun.com #发件的user,具体些发件的邮箱地址set smtp-auth-password=password  #password,具体写发件的密码set ssl-verify=ignore#set nss-config-dir=/etc/pki/nssdbset nss-config-dir=/root/.certs  #自己生成的证书目录。 /etc/pki/nssdb 系统本身有的证书目录set from="user@aliyun.com(nickname)"  #这里随便写发件人昵称和名字
}

配置完成,我们测试一下发送邮件, 由于阿里云发垃圾邮件策略,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
# 如果使用生成的证书一直报错,但是可以发送出去邮件,就不用处理

说明,上面用的是阿里云mail演示的,如果是其他域名替换就可以了。都是亲测的命令
1: 把命令中的smtp.xxx.com:465给替换了就行;
2: qq.crt变成aliyun.crt或者163.crt就可以了;

# 使用管道符|传递发送内容你通过
echo "this is test mail info"|mail -s "monitor" 601026460@qq.com##======================================================
## 执行上面就可以发送邮件,如果有警告:报postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by;
解决方法:https://blog.csdn.net/li_yong_kuan/article/details/45652127
(1)修改#  /etc/postfix/main.cf 这个文件
(2)修改内容: 把inet_protocols = all   修改为inet_protocols = ipv4(3)报存退出 wq!(4)重新启动 # /etc/init.d/postfix restart使修改生效

如果配置完成,还有问题,参加 Linux Mailx 邮件安装配置及8大常见问题
参考2 自己博客:邮件(mail)服务器
参考3 centos7 利用mailx发送邮件

6. 检测网站是否正常

 文件名:website_monitor.shsudo chmod 777 /usr/local/sh/website_monitor.sh;    sh /usr/local/sh/website_monitor.sh这里通过定时器进行检查网站是否正常,给管理员发送邮件
#!/bin/bash
# /usr/local/sh/website_monitor.sh
#一个网站访问10次,10次都是失败,就发送警告邮件给管理员
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; doFAIL_COUNT=0for ((i=1;i<=10;i++)); do# --connect-timeout 3 超时3秒钟HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)if [ $HTTP_CODE -eq 200 ]; thenecho "$URL OK"breakelseecho "$URL retry $FAIL_COUNT"let FAIL_COUNT++fidoneif [ $FAIL_COUNT -eq 10 ]; thenecho "Warning: $URL Access failure!"#这里进行邮件发送echo "Warning: $URL Access failure!"|mail -s "monitor" duandazhi@ourslook.com#其实还有更好的方式,就是自己开发一个 发送短信 或者 邮件的接口,使用 curl 进行调用SMS="http://193.0.10.197:8084/skynet/collect?infoId=4&text=oom_error$URL&phone=18758363171&title=watchdog"curl $SMS# 这里暂停1小时,防止提示太频繁了sleep 60m 30sfi
done

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

7.1 windows 进行清理

 文件名:delete_file.ps1 清理windows日志。
# windows使用powershell历史文件,比如超过15天的文件
#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删除指定日期前的文件并添加到计划任务

7.2 linux 进行清理

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

 文件名:auto-del-x-days-ago-log.sh清理linux日志。
# auto-del-x-days-ago-log.sh
# linux  删除日志文件
# 1:删除所有的tomcat超过1天的*.log日志find /usr/local/tomcat8/logs/ -mtime +1 -type f -name '*.log' -exec rm -rf {} \;find /usr/local/tomcat8/logs/ -mtime +5 -type f -name '*.txt' -exec rm -rf {} \;find /usr/local/tomcat8/logs/ -mtime +5 -type f -name '*.out' -exec rm -rf {} \;find /usr/local/tomcat8-8081/bin/logs/mall/ -mtime +5 -type f -name '*.gz' -exec rm -rf {} \;
# 2:删除所有qcuredb_开头的日志文件
find /data/db_backup/ -mtime +10 -name "*.sql.zip" -exec rm -rf {} \;
# 3:删除所有类型文件包含文件夹 nginx 日志; * 比较危险,删除文件夹 或者 不是 日志文件也会被清理
find /usr/local/nginx/logs -mtime +3 -name "*" -exec rm -rf {} \;
# 4: 删除rsyncd 备份两台服务器数据的记录日志,在A-->B, 在服务器B 上面进行删除日志.
rm -rf /var/log/rsyncd.log

参考: centos定期删除日志

8. 当运维人员使用ftp war包放到webapp下面,只要修改一个txt文件,tomcat就自动重启,不给运维人员开通任何其他操作权限

# server.sh放到定时器中一直检查文件restart.txt(0或者1)是否有变化,如果是1就重启tomcat
#!/bin/bashwhile read line
doif (($line == 1));thenprintf "无需重启"elif (($line == 2));thenecho "1" > /usr/local/server/tomcat8/restart.txt#1: 先关闭/usr/local/server/tomcat8/bin/shutdown.sh# 2: 重新启动nohup ./usr/local/server/tomcat8/bin/start.sh &elseprintf "无效指令"fi
done < /usr/local/server/tomcat8/restart.txt

8.mongodb监控并在服务挂掉后自动重启 脚本

1:mongodb莫名其妙的挂掉,很无语,这里做一个自动重启功能。
2:teleport社区版本也有这个问题,也是定时器一直自动重启。
#!/bin/bash
# mongo-auto-restart.sh#这里是检查teleport
#*/1 * * * *  /usr/local/teleport/start.sh   >> /var/log/cron_teleport.txt  #文件不存在会自动创建;这里自动重启teleport, teleport有bug 总是自动停止了; start.sh如果服务启动这,就不会再次启动;  这里是每5分钟
#---------------------#检查是否是root用户if [ $(id -u) != "0" ]
then
echo "Not the root user! Try using sudo command!"
exit 1
fi
#监控服务是是否存活,这里是通过监控端口来监控服务,这里也可以替换为其他服务
#netstat -anop | grep 127.0.0.1:47071
netstat -anop | grep 0.0.0.0:47071
if [ $? -ne 1 ]
then
exit
fiecho $(date +%T%n%F)" Restart mongodb Services " >> mongodb.atuo.restart.log
#重启服务
systemctl restart mongod.service

参考:mongodb监控并在服务挂掉后自动重启脚本- 同样适用于mysql、redis

二、 微软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 -fullpower shell执行策略(ExecutionPolicy):
Restricted——默认的设置, 不允许任何script运行
AllSigned——只能运行经过数字证书签名的script
RemoteSigned——运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名
Unrestricted——允许所有的script运行

7. Windows服务器如何使用shell

经常执行powershell发现执行不了,那个是因为微软增加了脚本执行策略;
linux服务器可以使用 xshell 或者 SecureCRT进行ssh 远程访问,敲命令特别爽;
但是windows默认都是UI界面,如何和linux一样的体验呢? 这里就是 openSSH
  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 然后输入密码,就可以了

三、 windows bat 批处理命令

3.0 如何开机启动bat

批处理中常用命令介绍(Echo、rem、goto、call、pause、if、for)

定时器执行bat命令 Windows通过计划任务定时执行bat文件,重点:起始于
Windows通过计划任务,始终无法执行bat文件,查阅很多文章,最终彻底解决
Windows计划任务(手动执行脚本正常,定时执行不生效)

3.1 使用批处理 杀死QQ、重启QQ 简化版

kill_vpn_restart_simple.bat

taskkill /f /im qq.exe
echo '/f:强制,/im:指定进程名称;  '
"D:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
echo '启动QQ成功;指定应用路径,就可以启动了.'

3.2 使用批处理 杀死QQ、重启QQ 升级版本

kill_vpn_restart.bat

echo 'kaishi setting'
set APPLICATION_NAME=tianrongxin_SV_VPN
@REM 第一步,杀死应用程序...; /f:强制,/im:指定进程名称;
taskkill /f /im SV_Client.exe
echo '%APPLICATION_NAME%  have kill succes....'@REM cd
C:
cd C:\Program Files (x86)\VONE\TopSecSV\
echo 'cd command success..'@REM start是windows启动命令;
start SV_Client.exe
@REM success
echo '%APPLICATION_NAME% start success '
pause
exit
exit

3.3 windows 重启tomcat服务

echo 'dazer.bat'
echo 'this is a windows batch in  post steps ======================= dazer '
echo '这些命令 在 打包完成后执行 ,解决 spring boot+swagger ,对应ui 的 jar 无法删除,只能手动关闭tomcat, 删除jar ,在重启 tomcat '
@REM 我是注释,第一步:关闭Tomcat
@REM 第二步:删除safety下面的文件
@REM 第三部:重启tomcatecho 设置参数
set CATALINA_HOME=D:\Server\tomcat9-safety-8680
set PRJ_NAME=safety.war@REM 删除之前的
echo 删除之前存在的
d:
cd %CATALINA_HOME%\bin@REM 停止Tomcat
echo 停止Tomcat
@REM 注释关闭命令,使用服务关闭call shutdown.bat
net stop tomcat9-safety-8680cd %CATALINA_HOME%\webapps

3.4 windows ping

echo 'del命令删除一个或者多个文件; rd /s 删除目录树'
echo 'del %PRJ_NAME%'
rd /s /q safety@REM 启动Tomcat
echo 启动Tomcat========
cd %CATALINA_HOME%\bin
@REM 注释命令,使用服务启动  call startup.bat
net start tomcat9-safety-8680
echo 启动Tomcat==sucess======echo 延迟10s------
ping -n 10 127.0.0.1
echo 启动Tomcat==sucess 2 sucess ======
pause

3.5 开机启动nginx (通过bat脚本)

脚本直接双击执行没有问题,但是放到执行计划里面,就是无法启动。
@REM kill nginx all
taskkill /fi "imagename eq nginx.EXE" /f
@echo 'nginx kill success'@REM  start nginx
echo 'start nginx...'
D:
cd D:\nginx-1.20.0\nginx-1.20.0
start nginx.exe
echo 'nginx start success'

四、 windows bat 开机启动

1、自己写的bat文件启动exe,发现直接前台exe执行没有问题,但是使用执行计划无效;
2、bat或者exe注册成服务,但是不规范也启动不了;需要借助启动工具作成服务
3、借助其他exe,修改注册表信息

windows10计划任务启动bat执行jar打包的jar文件
Windows-bat或exe文件设置为开机自动启动项或服务项 sc命令
2种方法教你,如何将exe注册为windows服务,直接从后台运行 【已经测试可用】

脚本 linux bash PowerShell、alibaba clound toolkit OpenSSH相关推荐

  1. 文件监控脚本 -- Linux bash

    文件监控脚本 – Linux bash md5算法及生成方式 MD5值等同于文件的ID,它的值是唯一的. 如果文件已被修改(例如嵌入式病毒,特洛伊木马等),其MD5值将发生变化. 因此,一些常规下载U ...

  2. linux保存shell脚本,linux – bash如何保存shell脚本

    是否可以保持/停止bash脚本进度而不会终止进程? (通过kill命令)或其他命令 例如 这个脚本 – install_linux_pkgs.bash,将逐步安装Linux pkgs ./instal ...

  3. 批量添加用户脚本--Linux bash

    脚本实例 批量用户添加 for 在读取文件时,任何空白字符都可以自动作为分隔符.while的按行读取使用的是换行符作为标记,所以在这使用while更好 majun@instance-zqtg07w6: ...

  4. Alibaba Cloud Toolkit —— 项目一键部署工具

    Alibaba Cloud Toolkit 介绍 简介 原理 传统部署方式 Cloud Toolkit部署方式 整合步骤 前提 下载插件 参数配置与使用 补充: 1. 如果使用Windows作为部署服 ...

  5. linux运行powershell,linux – 是否可以编写一个在bash / shell和PowerShell中运行的脚本?...

    我需要创建一个集成脚本来设置一些环境变量,使用wget下载文件并运行它. 挑战在于它需要是可以在Windows PowerShell和bash / shell上运行的SAME脚本. 这是shell脚本 ...

  6. Idea使用Alibaba Cloud Toolkit实现一键部署项目到linux环境

    介绍 Alibaba Cloud Toolkit可以帮助开发者更高效地部署.测试.开发和诊断应用.Cloud Toolkit与主流IDE及阿里云其他产品无缝集成,帮助您大大简化应用部署到服务器,尤其是 ...

  7. 如何在 Linux 中创建并运行 Shell 脚本(Bash 初学者教程)

    文章目录 1.创建并运行第一个 shell 脚本 2.将 shell 脚本转换为 bash 脚本 3.为什么大多数 shell 脚本都包含 #! /bin/bash 在 shell 脚本的开头? 4. ...

  8. Linux脚本:Bash脚本看这一篇就够了

    前言 Linux脚本有很多解析器(Shell),不同解析器要求的脚本语法是不一样的.系统在解析脚本时,如果没有在脚本声明指定解析器,则会采用系统默认解析器来对脚本进行解析.sh是非常重要解析器,历史很 ...

  9. Alibaba Cloud Toolkit一键上云神器

    在中小公司中,有一个痛点,项目开发完毕需要部署到服务器上,传统的做法比较麻烦,而且修改完代码后又要重新打包上传,做这些重复性的工作需要消耗大量的时间,而部署自动化的CI工具,则成本具大,需要很高的服务 ...

最新文章

  1. innodb表 手工导入导出
  2. Android Studio快速的接受一个项目
  3. 使用PyCharm创建Django项目及基本配置
  4. Linux下使用MySQL——忘记root密码及修改MySQL默认编码
  5. 4、路由器和主机如何配置IP地址等信息才能使计算机相互通信
  6. mysql 查询字段中是否存在空格的_mysql查询字段中带空格的值的sql语句
  7. linux命令大全rename,Linux常用命令汇总--rename
  8. MOCTF-Web-没时间解释了
  9. 在 .NET Core 中使用 DiagnosticSource 记录跟踪信息
  10. vue ---- vue 的入门程序
  11. 饱和气压与温度的关系_饱和水蒸气压计算公式,看懂的赶紧来
  12. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署nacos-sentinel-rocketmq-zipkin-elasticsearch等等 一键部署 即开即用服务
  13. Vue项目实例(一)------背景
  14. 3. (5.18~5.25)2022年自动化保研信息+分析汇总(夏令营)
  15. Proe3.0-5.0安装说明
  16. mysql脏写_图解脏写、脏读、不可重复读、幻读
  17. CW5141S1 TWM 测试例程
  18. Python打开记事本
  19. Acrel-2000Z变电站综合自动化系统
  20. passive-interface的含义

热门文章

  1. 基因数据处理121之SSW的score matrix调整,使得与SparkSW评分一致
  2. 【报错】导入VirtualBox虚拟机文件时,错误提示:返回 代码:E_INVALIDARG (0x80070057)
  3. 5.论文学习A review of deep learning in medical imaging: Imaging traits, technology trends, case studies
  4. Java多线程 理发店小测试
  5. Nike web如何协议登陆|snkrs 协议登录|snkrs bot
  6. kafka原理图简介
  7. 牛妹的字符串(删除ascii码最小的k个字母)
  8. 什么是网站描述?如何批量获取网站描述?网站优化推广跟网站描述有什么关系?
  9. Android L 值不值得刷?十个问题解疑惑
  10. git 本地回退至某个版本