脚本 linux bash PowerShell、alibaba clound toolkit OpenSSH
##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脚本,基本不维护了
- 后缀.sh: linux bash 文件后缀,可以使用 intellij idea 进行编辑
- 后缀.bat: windows 老牌脚本 cmd 文件
- 后缀.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端口.
- inotifywait实现文件监控 - (有手工安装)
- 自己博客~~~如何利用 inotifywait 命令监控文件变化?
- rc.local 是否运行、
systemctl status rc-local
、systemctl restart rc-local
- 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*.sevice
、find / -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 了
- powershell教程网站
- microsoft PowerShell官网文档、示例代码
- Windows PowerShell ISE 集成脚本环境
- PowerShell 查看版本
- Windows PowerShell:管理服务器 启动关闭
- Powershell快速入门(一) 安装和使用
2. 常见命令
常见命令在powerShell中。
Get-Host
查看ps版本,现在的windows 2012R2 基本都是 powershell 5.0+了Get-Alias
查看所有别名,比如:ls
linux、dir
cmd 命令 你会发现竟然能使用Get-Command
获取所有的函数、获取所有命令行Get-Command -CommandType Alias
、Get-Command -CommandType Function
3. PS支持的四种命令类型
四种命令类型
cmdlet
命令行alias
别名,部分DOC命令和linux都是别名function函数
组合多个命令,组合成函数application
可以执行运行应用程序,如:notepad
4. PS帮助系统
使用常用的帮助系统命令类型
- 帮助系统
man
,比如要查看man ls命令 或者 Get-Help cp, ls - dir - 、cp – Copy-Item - copy、 Get-Command ls
查看命令的原始命令, 这里查看ls 这个别名在powershell的原始命令, 查看该命令的详细信息Get-Command ls | fl *;
、获取所有和文件相关命令Get-Command -Noun item*, path | select Name、Get-Alias
获取命令的原始命令,比如查看,ls、cp、man的原始命令 Get-Alias lspowershell常见命令大全
powershell命令大全- 在官网查看命令的参数,如,我们查看 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
- 下载安装OpenSSH one 在 Windows 中的 OpenSSH
- 下载安装OpenSSH two , 使用openSSH, windows电脑可以和linux电脑使用通用的ssh方式进行连接管理。eg: 和linux一样命令行操作、ftp上传; 其他安装指南~~~Windows安装OpenSSH服务; https://github.com/PowerShell/Win32-OpenSSH/releases页面进行下载OpenSSH-Win64.zip
- 配置openSSH的根目录,可以访问账号等 windows openssh 设置root 目录
- 设置注册表 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
- FAQ: 该了配置文件,发现不起作用;需要卸载openSSH,重新安装就生效了
- 安装完毕,查看端口号22是否已经开始监听:
netstat -an | findstr :22
- 服务器上面测试一下,第一:检查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相关推荐
- 文件监控脚本 -- Linux bash
文件监控脚本 – Linux bash md5算法及生成方式 MD5值等同于文件的ID,它的值是唯一的. 如果文件已被修改(例如嵌入式病毒,特洛伊木马等),其MD5值将发生变化. 因此,一些常规下载U ...
- linux保存shell脚本,linux – bash如何保存shell脚本
是否可以保持/停止bash脚本进度而不会终止进程? (通过kill命令)或其他命令 例如 这个脚本 – install_linux_pkgs.bash,将逐步安装Linux pkgs ./instal ...
- 批量添加用户脚本--Linux bash
脚本实例 批量用户添加 for 在读取文件时,任何空白字符都可以自动作为分隔符.while的按行读取使用的是换行符作为标记,所以在这使用while更好 majun@instance-zqtg07w6: ...
- Alibaba Cloud Toolkit —— 项目一键部署工具
Alibaba Cloud Toolkit 介绍 简介 原理 传统部署方式 Cloud Toolkit部署方式 整合步骤 前提 下载插件 参数配置与使用 补充: 1. 如果使用Windows作为部署服 ...
- linux运行powershell,linux – 是否可以编写一个在bash / shell和PowerShell中运行的脚本?...
我需要创建一个集成脚本来设置一些环境变量,使用wget下载文件并运行它. 挑战在于它需要是可以在Windows PowerShell和bash / shell上运行的SAME脚本. 这是shell脚本 ...
- Idea使用Alibaba Cloud Toolkit实现一键部署项目到linux环境
介绍 Alibaba Cloud Toolkit可以帮助开发者更高效地部署.测试.开发和诊断应用.Cloud Toolkit与主流IDE及阿里云其他产品无缝集成,帮助您大大简化应用部署到服务器,尤其是 ...
- 如何在 Linux 中创建并运行 Shell 脚本(Bash 初学者教程)
文章目录 1.创建并运行第一个 shell 脚本 2.将 shell 脚本转换为 bash 脚本 3.为什么大多数 shell 脚本都包含 #! /bin/bash 在 shell 脚本的开头? 4. ...
- Linux脚本:Bash脚本看这一篇就够了
前言 Linux脚本有很多解析器(Shell),不同解析器要求的脚本语法是不一样的.系统在解析脚本时,如果没有在脚本声明指定解析器,则会采用系统默认解析器来对脚本进行解析.sh是非常重要解析器,历史很 ...
- Alibaba Cloud Toolkit一键上云神器
在中小公司中,有一个痛点,项目开发完毕需要部署到服务器上,传统的做法比较麻烦,而且修改完代码后又要重新打包上传,做这些重复性的工作需要消耗大量的时间,而部署自动化的CI工具,则成本具大,需要很高的服务 ...
最新文章
- innodb表 手工导入导出
- Android Studio快速的接受一个项目
- 使用PyCharm创建Django项目及基本配置
- Linux下使用MySQL——忘记root密码及修改MySQL默认编码
- 4、路由器和主机如何配置IP地址等信息才能使计算机相互通信
- mysql 查询字段中是否存在空格的_mysql查询字段中带空格的值的sql语句
- linux命令大全rename,Linux常用命令汇总--rename
- MOCTF-Web-没时间解释了
- 在 .NET Core 中使用 DiagnosticSource 记录跟踪信息
- vue ---- vue 的入门程序
- 饱和气压与温度的关系_饱和水蒸气压计算公式,看懂的赶紧来
- Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署nacos-sentinel-rocketmq-zipkin-elasticsearch等等 一键部署 即开即用服务
- Vue项目实例(一)------背景
- 3. (5.18~5.25)2022年自动化保研信息+分析汇总(夏令营)
- Proe3.0-5.0安装说明
- mysql脏写_图解脏写、脏读、不可重复读、幻读
- CW5141S1 TWM 测试例程
- Python打开记事本
- Acrel-2000Z变电站综合自动化系统
- passive-interface的含义
热门文章
- 基因数据处理121之SSW的score matrix调整,使得与SparkSW评分一致
- 【报错】导入VirtualBox虚拟机文件时,错误提示:返回 代码:E_INVALIDARG (0x80070057)
- 5.论文学习A review of deep learning in medical imaging: Imaging traits, technology trends, case studies
- Java多线程 理发店小测试
- Nike web如何协议登陆|snkrs 协议登录|snkrs bot
- kafka原理图简介
- 牛妹的字符串(删除ascii码最小的k个字母)
- 什么是网站描述?如何批量获取网站描述?网站优化推广跟网站描述有什么关系?
- Android L 值不值得刷?十个问题解疑惑
- git 本地回退至某个版本