Linux命令执行.sh文件

Linux系统中用命令如何运行.sh文件的方法

一、直接./加上文件名.sh,如运行hello.sh为./hello.sh【hello.sh必须有x权限】

二、直接sh 加上文件名.sh,如运行hello.sh为sh hello.sh【hello.sh可以没有x权限】

1:当前目录执行xshell

1.1:cd到.sh文件所在的目录:/home/datelog/uploadserver_wql

1.2:命令:./wql.sh 若该文件没有执行权限,则给该文件赋权限

1.3:赋权限命令:chmod u+x wql.sh

1.4:./执行.sh文件:./wql.sh(用“./”加文件名.sh执行时,必须给.sh文件加x执行权限) 

1.5:或者sh执行文件:sh wql.sh(该命令不需要赋权限) 

2:绝对路径执行.sh文件

2.1:/home/datelog/uploadserver_wql/wql.sh

2.2:或者执行命令:sh /home/datelog/uploadserver_wql/wql.sh

下面介绍一种快捷启动或者停止站点的方式

例如下图目录结构,我们的项目站点放在/export/App/ag-springboot目录下面

bin目录放的start.sh 和 stop.sh 文件;conf目录下放的是配置文件application.properties;lib目录下存放的是jar包ag-springboot-1.0.0.jar

启动服务命令:

[root@localhost ~]# cd /export/App/ag-springboot/bin
[root@localhost ~]# sh start.sh

停止服务命令:

[root@localhost ~]# cd /export/App/ag-springboot/bin
[root@localhost ~]# sh stop.sh

start.sh 中代码如下:

#!/bin/bash

#----------以下变量可以在脚本中直接使用----------------
# $def_app_id           应用id
# $def_app_name         应用名称
# $def_app_domain       应用域名
# $def_app_deploy_path  兼容老部署,废弃
# $def_path_app_log     应用日志路径 如:/export/Logs/
# $def_path_app_data    如:/export/Data
# $def_group_id         分组 id
# $def_instance_id      实例id
# $def_instance_name    实例名称 server1
# $def_instance_path    实例完成路径 /export/Instances/jone/server1/
# $def_host_ip
#--------------------------

#set -o errexit
readonly APP_NAME=ag-springboot          #定义当前应用的名称
readonly JAR_VERSION=1.0.0         #打包的JAR版本
#获取当前应用的进程 id
function get_pid
{
  pgrep -f "$EXE_JAR"
}

BASEDIR=$(cd $(dirname $0) && pwd)/..            # 获取运行脚本的上级目录

readonly JAVA_HOME=$JAVA_HOME
readonly JAVA=$JAVA_HOME/bin/java

EXE_JAR="$APP_NAME-$JAR_VERSION.jar"
echo "$EXE_JAR"

echo "Starting $APP_NAME ...."
[[ -x $JAVA ]] || {
    echo "ERROR: no executable java found at $JAVA" >&2
    exit 1
}

JVM_OPTS=" -server -Xms512m -Xmx512m -Djava.awt.headless=true -XX:+HeapDumpOnOutOfMemoryError "
profile=pro
#日志配置
log_path=/export/Logs/ag-springboot
log_file=$log_path/catalina.out
log_file_backup=${log_file}.$(date "+%Y-%m-%d-%H_%M_%S").log

if [[ ! -d "log_path" ]]; then
    mkdir -p ${log_path}
    echo "log_path dir created"
fi

if [ -f "${log_file}" ];then
    cp ${log_file} ${log_file_backup}
    echo "" > ${log_file}
fi

[[ -z $(get_pid) ]] || {
    echo "ERROR:  $APP_NAME already running" >&2
    exit 1
}

echo 'JDK路径:'$JAVA_HOME
echo '当前路径:'$BASEDIR
echo '日志路径:'$log_path
echo '当前的启动环境:'${profile:=pro}

setsid $JAVA $JVM_OPTS -jar $BASEDIR/lib/$EXE_JAR --spring.profiles.active=$profile --spring.config.location=../conf/ > $log_file 2>&1 &

sleep 0.5
[[ -n $(get_pid) ]] || {
    echo "ERROR: $APP_NAME failed to start" >&2
    exit 1
}

echo "$APP_NAME is up runnig :)"
View Code

stop.sh 中代码如下:

#!/bin/bash

set -o errexit
set -o nounset

readonly APP_NAME=ag-springboot          #定义当前应用的名称
readonly JAR_VERSION=1.0.0         #打包的JAR版本
EXE_JAR="$APP_NAME-$JAR_VERSION.jar"
#获取当前应用的进程 id
function get_running_pid
{
  pgrep -f "$EXE_JAR"
}

readonly SELF_DIR=$(cd $(dirname $0) && pwd)

function stop
{
    local -i timeout=20
    local -i interval=1
    local -r service_pid=$(get_running_pid) || true # ignore error
    [[ -n $service_pid ]] || {
        echo "WARNING: process not found, nothing to stop" >&2
        exit 0
    }
    echo "Stopping application with PID:$service_pid ..."
    kill $service_pid
    while (( timeout > 0 )) && get_running_pid > /dev/null; do
        echo -n "."ƒ
        sleep $interval
        timeout=$(( timeout - interval ))
    done
    if get_running_pid > /dev/null; then
        echo "WARNING: process still alive, sending SIGKILL ..." >&2
        kill -9 "$service_pid"
    fi
}
function main
{
    get_running_pid > /dev/null || {
        echo "WARNING: process not found, nothing to stop" >&2
        exit 0  # Ignore error
    }
    stop
}
main "$@"
View Code

application.properties 配置文件中代码如下:

server.port=8181
spring.application.name=ag-springboot

logging.config=classpath:logback.xml
View Code

 

posted @ 2021-08-25 13:57  以德为先  阅读(5580)  评论(0编辑  收藏  举报