Linux常用命令

1,写一个自己的日志命令:logmsg

1)一般打印日志时需要记录时间戳,我们现在改写脚本“004-while.sh”,示例如下:

……
##→编写LogMsg函数,每次调用,重新打印时间戳
LogMsg () {
  local_time=`date +"%Y-%m-%d %H:%M:%S"`
  echo $local_time $1
}
……
   if [ $sshd_count -lt 1 ]
   then
       LogMsg  '没有找到ssh服务,重启该服务'          #调用LogMsg函数
       systemctl start sshd
   else
       LogMsg  'ssh服务正常运行中...'                 #调用LogMsg函数
    fi

重新执行,示例如下:

[root@linuxido /shell]# sh 004-while.sh 
2021-06-07 07:35:11 ssh服务正常运行中...
2021-06-07 07:35:16 ssh服务正常运行中...
……

2)如果每个脚本中都要写个LogMsg的方法,就会很麻烦,可不可以像使用其他命令一样,直接调用呢?例如echo、cat我们先来新建logmsg脚本。示例如下:

[root@linuxido /shell]# vi logmsg.sh     ##→编辑logmsg.sh脚本
……
LogMsg() {
  local_time=`date +"%Y-%m-%d %H:%M:%S"`
  echo $local_time $1  #此时的$1是指调用LogMsg时输入的第一个参数
}

LogMsg $1     #调用LogMsg函数,此时的$1是指调用脚本时输入的第一个参数

3)虽然写了logmsg脚本,但是没法在文件目录以外的地方使用。还记得前面章节所说的,命令一般放在哪个目录吗?当然是/bin目录了。

##→创建logmsg命令的符号链接
[root@linuxido /shell]# ln -s  /shell/logmsg.sh /bin/logmsg  
[root@linuxido /shell]# logmsg         ##→直接执行logmsg命令
-bash: /usr/bin/logmsg: 权限不够         ##→执行时发现虽然调用了/usr/bin,但权限不够
[root@linuxido /shell]# chmod 555 /bin/logmsg  ##→赋予555权限,所有用户可读可执行
[root@linuxido ~]##→logmsg linuxido.com       ##→直接执行logmsg命令,参数为yaomm
2021-06-07 23:25:19 linuxido.com                 ##→执行成功

(4)为什么/bin目录下的命令可以在任何目录下直接执行呢?因为环境配置的原因,/bin目录下的命令直接被赋予了全局调用的环境。

注意:除了echo,还可以使用print、printf打印文本。

2,写一个常用的备份命令:backup

1)编辑backup脚本,先故意命名bachup.sh。

[root@yaomm shell]# vi bachup.sh                ##→编写备份脚本
#!/bin/bash    
# description:编写备份常用脚本
# date:2020-06-26
# filename:bachup.sh
# author:linuxido.com

# 编辑backup函数,将要备份的文件名添加上时间戳之后改名
function backup() {
  newfile=$1.`date +%Y-%m-%d.%H%M.bak`;         ##→新文件名称,加上时间戳
  cp -p $1 $newfile;                                ##→复制一份文件
  echo "Backed up $1 to $newfile.";             ##→打印成功日志
}

backup $1                                          ##→调用backup函数

2)创建/bin目录下的脚本链接,将bachup.sh链接为/bin/backup。

[root@yaomm shell]# ln -s /shell/bachup.sh /bin/backup    ##→创建链接,注意全路径
[root@yaomm shell]# ll /bin/backu*
##→创建成功
lrwxrwxrwx 1 root root 16 Jun 20 10:33 /bin/backup -> /shell/bachup.sh 
[root@yaomm shell]# chmod 555 /bin/backup.sh       ##→赋予所有用户执行权限

[root@yaomm shell]# touch sss.txt                  ##→创建测试脚本
[root@yaomm shell]# backup sss.txt                    ##→备份测试
Backed up sss.txt to sss.txt.2021-06-20.1034.bak.  ##→备份成功
[root@yaomm shell]# ll
-rw-r--r-- 1 root root   0 Jun 20 10:31 sss.txt                            ##→原文件
-rw-r--r-- 1 root root   0 Jun 20 10:31 sss.txt.2021-06-20.1034.bak ##→备份文件

3,写一个Java项目的管理脚本:springboot-admin.sh

在做Java开发、运维、测试的工作中,和Spring Boot打交道的地方很多。怎么轻松管理一个Spring Boot的项目部署呢?借着这个来自GitHub的开发者junbaor的优秀实例,我们来看看一个Shell脚本是如何炼成的。

修改后的脚本详见本书代码网盘(详见“前言”)。简略代码如下:

operation=$1      ##→第一个参数,start、stop、restart、status
springboot=$2     ##→第二个参数,Jar包名

##→校验参数是否为空
showUsage() {

    ##→校验第一个参数是否为空 
    if [ "$operation" == "" ];        ##→注意:中括号[]两端至少要有一个空格
……
    ##→校验第二个参数是否为空
    if [ "$springboot" == "" ];
……
    count=`ls $springboot | wc -l`   # 校验jar包是否存在
……
}

##→启动springboot项目
function start()
{
    count=`ps -ef |grep java|grep $springboot|grep -v grep|wc -l`
    if [ $count != 0 ];then
        echo "$springboot is running..."
    else
                ls $spring
        ##→启动springboot项目,反斜杠连接命令
        nohup java -server -Xmx1g -Xms1g -Xss512k \
        -jar $springboot > /dev/null 2>&1 &

        ##→调换提示位置
        echo "Start $springboot success..."
    fi
}

##→关闭springboot项目
function stop()
{
……
    count=`ps -ef |grep java|grep $springboot|grep -v grep|wc -l`

    ##→先用kill -15 发出停止信号,等待springboot自行关闭
    if [ $count != 0 ];then
        echo "Stop Success! 优雅关闭 $springboot  Process..."
        kill $boot_id
     fii
……
}

##→重启springboot项目,关闭后停止两秒重新启动
function restart()
{
    stop
    ##→睡眠两秒调用start方法
    sleep 2
    start
}

##→查看springboot项目的启动状态
function status()
{
    count=`ps -ef |grep java|grep $springboot|grep -v grep|wc -l`
    jarStatus=`ps -ef |grep java|grep $springboot`
……
}

showUsage ##→先验证参数是否为空

##→只有第一个输入变量是 start|stop|restart|status的时候,才执行对应的方法
case $1 in
        start)
        start;;
        stop)
        stop;;
        restart)
        restart;;
        status)
        status;;
        *)
 echo -e "\033[0;34m  请正确操作:{start|stop|restart|status}.\n Example:bash springboot-admin.sh start test-springboot.jar \033[0m"
esac
执行脚本:
[root@yaomm shell]# sh springboot-admin.sh start xx.jar  ##→执行一个不存在的jar包
ls: cannot access xx.jar: No such file or directory        ##→v0.3应该解决这个问题
 xx.jar不存在

[root@yaomm shell]# sh springboot-admin.sh reload /home/deploy/face-0.0.1-SNAPSHOT.jar 
  请正确操作:{start|stop|restart|status}.                    ##→reload不存在已有选项中
 Example:bash springboot-admin.sh start test-springboot.jar

[root@yaomm shell]# sh springboot-admin.sh start /home/deploy/face-0.0.1-SNAPSHOT.jar 
……    
Start /home/deploy/face-0.0.1-SNAPSHOT.jar success...     ##→正常启动

[root@yaomm shell]# sh springboot-admin.sh stop /home/deploy/face-0.0.1-SNAPSHOT.jar 
Stop /home/deploy/face-0.0.1-SNAPSHOT.jar ...               ##→正常关闭
Stop Success! 优雅关闭 /home/deploy/face-0.0.1-SNAPSHOT.jar  Process...
我们可以通过将脚本放入/usr/bin下或建立systemd服务的方式进行服务控制,这个可以做到如下效果:
systemctl start xxx.jar                                          ##→方法1
springboot-admin start xxx.jar                                 ##→方法2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值