Linux中启动/停止/重启/状态的startup脚本

2021-02-19  本文已影响0人  刘小白DOER

    今天看到一个脚本,可以完成脚本的启动/停止/重启/状态,和/etc/init.d中的服务一样。但是/etc/init.d里面的服务要设置开机启动,可以使用service来管理。如果不设置开机启动且方便管理,这个独立脚本就可以自由完成特定的动作。于是笔者将其简单改写后保存下来,用作操作脚本的一种方法,也可以利用crontab将其加入定时任务作为判断进程是否正常并重启。

    脚本startup后面传递两个参数,需要操作的脚本名称$1和运行方式$2(start stop restart......)。

  1、startup脚本

#!/bin/bash

APP_NAME=$1

DIR_NAME=$HOME/shell/$APP_NAME

#使用说明,用来提示输入参数

usage() {

        echo "Usage: sh 执行脚本.sh app_name [start|stop|restart|status]"

        exit 1

}

#检查程序是否在运行

is_exist(){

pid=`ps -ef | grep $DIR_NAME | grep -v grep | grep -v $0 | awk '{print $2}'`

echo $pid

#如果不存在返回1,存在返回0

if [ -z "${pid}" ]; then

        return 1

        else

        return 0

        fi

}

#启动方法

start(){

is_exist

if [ $? -eq "0" ]; then

        echo "${APP_NAME} is already running. pid=${pid} ."

        else

        nohup sh $DIR_NAME > /dev/null 2>&1 &

        fi

}

#停止方法

stop(){

is_exist

if [ $? -eq "0" ]; then

        kill -9 $pid

        else

        echo "${APP_NAME} is not running"

        fi

}

#输出运行状态

status(){

is_exist

if [ $? -eq "0" ]; then

        echo "${APP_NAME} is running. Pid is ${pid}"

        else

        echo "${APP_NAME} is NOT running."

        fi

}

#重启

restart(){

        stop

        sleep 5

        start

}

#根据输入参数,选择执行对应方法,不输入则执行使用说明

case "$2" in

start)

      start

;;

stop)

        stop

;;

status)

        status

;;

restart|reload)

        restart

;;

exist)

        is_exist

;;

*)

usage

;;

esac

    脚本中pid=`ps -ef | grep $DIR_NAME | grep -v grep | grep -v $0 | awk '{print $2}'` 中grep -v $0直接将本程序start筛选掉。$0代表startup本身文件名。

2、放置于默认路径中

    移动到默认路径/usr/local/bin中:mv startup /usr/local/bin ,这样就可以直接使用startup 而不加路径。

3、使用脚本

测试脚本testwhile.sh放置于/root/shell目录下:

#!/bin/bash

echo "my while_prog:"

while true

do

    echo "test mysh!"

    sleep 2

done

startup testwhile.sh start 完成开启脚本

startup testwhile.sh stop 完成关闭脚本

startup testwhile.sh status完成查看脚本状态

startup testwhile.sh restart/reload 完成重启脚本

    此脚本的意义在提供一种独立于/etc/init.d 的方法,当然也可以和/etc/init.d中的服务一样,虽不设置开机启动,也可以将运行的脚本做成服务放置于其中,使用/etc/init.d/testwhile.sh start 来完成启动任务。

上一篇下一篇

猜你喜欢

热点阅读