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 :)"
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 "$@"
application.properties 配置文件中代码如下:
server.port=8181 spring.application.name=ag-springboot logging.config=classpath:logback.xml