发表于: 2020-03-04 22:31:10
1 1198
学习shell脚本 服务器上的操作
一条很重要的命令(刷新日志)
tail -f debug-log.log
正则(可以匹配任意字符串)
脚本看的有点吃力 nginx配置有点昏
#!/bin/bash
#############################################
# this script is Tomcat Management tool #
#############################################
#
# functions这个脚本是给/etc/init.d里边的文件使用的。
# https://www.cnblogs.com/image-eye/archive/2011/10/26/2220405.html
. /etc/init.d/functions
# 通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。
# set env
export PATH=$PATH:/bin:/sbin:/usr/sbin
# 设置中文字符
export LANG="zh_CN.UTF-8"
# 设置tomcat启动脚本
export tomcatStart=/www/server/tomcat/bin/startup.sh
# 检测是否以root权限运行脚本
# whoami是操作系统中用于查看当前有效用户名的命令
# >&2 以错误的提示方式输出此句话 0 代表鍵盤輸入 1 代表螢幕輸出
if [[ "$(whoami)" != "root" ]]; then
echo "请以root用户运行此脚本" >&2
exit 1
fi
# /etc/init.d/functions 这个脚本是给/etc/init.d里边的文件使用的,函数库
#. /etc/init.d/functions
#if [ ! -f /opt/software/apache-tomcat-7.0.72/bin/startup.sh ]
# 1 -f 判断文件是否存在
# http://blog.51cto.com/kangyang/810182
if [ ! -f ${tomcatStart} ]
then
echo "tomcat 未安装,请安装后执行"
exit 1
# 用fi表示if语句块的结束
fi
# 启动
function start(){
# ps -ef |grep java|grep -v grep|grep -v sh
# ps -ef |grep java 显示 ps -ef 中包含java的行
# grep -v $value 反向查找,输出不包含变量的行
# |grep -v grep 过滤掉包含grep的行,当执行grep时ps -ef也会显示出执行命令
# |grep -v sh 过滤掉包含sh的行
# |wc -l 统计过滤后的行数
# $1 -eq $2 对比是否相等
if [ `ps -ef |grep java|grep -v grep|grep -v sh|wc -l` -eq 0 ]
# true 执行 then
then
# /dev/null 代表空设备文件
# > :代表重定向到哪里,例如:echo "123" > /home/123.txt
# 1 :表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
# 2 :表示stderr标准错误
# & :表示等同于的意思,2>&1,表示2的输出重定向等同于1
# 1 > /dev/null 2>&1 语句含义
# 1 > /dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
# 2>&1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
/bin/sh ${tomcatStart} >/dev/null 2>&1
# 在Linux底下,每个程序执行完毕都会返回一个退出码给调用者,一般情况下0表示成功,其他值表明有问题,当然某些程序的退出码有特殊含义
# 0表示成功(Zero - Success)
# 非0表示失败(Non-Zero - Failure)
# 2表示用法不当(Incorrect Usage)
# 127表示命令没有找到(Command Not Found)
# 126表示不是可执行的(Not an executable)
# >=128 信号产生
# $? 上一个命令的退出码
[ $? -eq 0 ]&&\
# 进程休眠1秒钟
sleep 5
# /bin/true 命令啥都不做,只设置退出码为0。
action "tmocat 已启动." /bin/true
else
action "tomcat 是启动的." /bin/true
exit 3
# if语句结束
fi
}
# 停止
function stop(){
if [ `ps -ef |grep java|grep -v grep|grep -v sh|wc -l` -gt 0 ]
then
PID=`ps -ef |grep java|grep -v grep|awk '{print $2}'`
# kill信号 中,只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略,要想强制杀死进程,要加 -9参数。
kill -9 $PID
[ $? -eq 0 ]&&\
echo "tomcat 停止中..."
sleep 2
action "tomcat 已经停止了." /bin/true
else
action "tomcat 是停止的." /bin/true
exit 4
fi
}
# 重启
function restart(){
if [ `ps -ef |grep java |grep -v grep|grep -v sh|wc -l` -gt 0 ]
then
PID1=`ps -ef |grep java|grep -v grep|awk '{print $2}'`
kill -9 $PID1
[ $? -eq 0 ]&&/bin/sh ${tomcatStart} >/dev/null 2>&1
[ $? -eq 0 ]&&echo "tomcat 重启中 ..."
sleep 5
action "tomcat 已重启 ." /bin/true
else
action "tomcat 没有运行,正在启动中 ..." /bin/true
[ $? -eq 0 ]&&/bin/sh ${tomcatStart} >/dev/null 2>&1
[ $? -eq 0 ]&&\
sleep 5
action "tomcat 已启动 ." /bin/true
fi
}
# 查看状态
function status(){
if [ `ps -ef |grep java |grep -v grep|wc -l` -gt 0 ]
then
action "tomcat 正在运行" /bin/true
else
action "tomcat 已停止运行" /bin/false
exit 5
fi
}
# 将脚本后的第一个单词匹配到$1
case $1 in
# 如果是start 执行 start()
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
# 如果没有匹配到 输出echo语句
*)
echo "请在脚本后添加正确的执行参数:start|stop|restart|status"
#结束case
esac
今日问题 : 1村里网不太好,服务器老是断 2出了一个500的BUG还没解决
评论