目录

在Linux上启动程序后台运行时,往往需要输入一堆复杂的命令,为了能快速编写一个完善的启动脚本,整理一个通用的启停脚本模板如下。

脚本支持从任意位置执行,不存在路径问题,启动脚本和停止脚本最好一起配合使用。

启动脚本

#!/bin/bash

current_path=$(cd `dirname $0`; pwd)
parent_path=$(cd ${current_path} ; cd ..; pwd)
conf_path=$parent_path/conf
log_path=$parent_path/log
#echo $current_path
#echo $parent_path pid_file=$current_path/xxx.pid
arg1=$1
arg2=$2 function print_usage() {
echo ""
echo "Usage:"
echo " sh $0 <arg1> <arg2>"
echo ""
echo " e.g:"
echo " sh $0 yyy zzz"
echo ""
} if [[ ! "${arg1}" ]]; then
print_usage
exit 1
fi if [[ ! "${arg2}" ]]; then
print_usage
exit 1
fi #print_usage if [[ -f "${pid_file}" ]]; then
pid=`cat ${pid_file}`
pid_exist=$(ps aux | awk '{print $2}'| grep -w $pid)
if [[ "$pid_exist" ]]; then
echo ""
echo "process is running: ${pid}, Please stop it first!"
echo ""
exit 1
fi
fi echo "startup..."
echo "arg1: ${arg1}, arg2: ${arg2}" ## 启动Python进程示例
#nohup python ${parent_path}/test_tasks.py -s ${arg1} -c ${arg2} > /dev/null 2>&1 & echo $! > $pid_file ## 启动Java进程示例
## set java path
#if [ -z "$JAVA" ]; then
# JAVA=$(which java)
#fi #if [ -z "$JAVA" ]; then
# echo "java not install, Please install java first" 2>&2
# exit 1
#fi ## set classpath
#CLASSPATH=$parent_path/conf
#for i in $parent_path/libs/*;
#do
# CLASSPATH="$CLASSPATH":$i
#done #OPTS_APP="-Dlogback.configurationFile=$conf_path/logback.xml -Dlog.dir=$log_path"
#OPTS_MEM="-Xms1024m -Xmx1024m"
#OPTS_JAVA_EXT="-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8"
#OPTS_JAVA="$OPTS_JAVA_EXT $OPTS_MEM $OPTS_APP" ## 方式1: 明确指定main方法所在的入口类
#nohup $JAVA $OPTS_JAVA -classpath $CLASSPATH xxx.yyy.zzz.BootstrapClass > /dev/null 2>&1 & echo $! > $pid_file ## 方式2: 直接指定可执行jar包
#nohup $JAVA $OPTS_JAVA -jar xxx.jar > /dev/null 2>&1 & echo $! > $pid_file sleep 1
echo "started."
echo "process id: `cat ${pid_file}`"
echo ""

根据实际情况,将脚本模板中的xxxarg1arg2修改为对应的名称即可。

停止脚本

#!/bin/bash

current_path=$(cd `dirname $0`; pwd)
#echo $current_path pid_file=$current_path/xxx.pid if [[ ! -f "${pid_file}" ]]; then
echo "pid file not exists"
echo ""
exit 1
fi echo "stopping..."
pid=`cat ${pid_file}`
echo "process id: ${pid}"
kill -15 $pid
sleep 1 # check process exists
pid_exist=$(ps aux | awk '{print $2}'| grep -w $pid)
if [[ ! "${pid_exist}" ]]; then
# echo the process $pid is not exist
rm -rf ${pid_file}
else
# echo the process $pid exist
kill -9 $pid
sleep 1
rm -rf ${pid_file}
fi echo "stopped."

根据实际情况,将脚本模板中xxx修改为对应名称即可。

【参考】

https://blog.csdn.net/baidu_38558076/article/details/88191567 shell 判断pid是否真实存在

https://blog.csdn.net/sunt2018/article/details/102523112 后台启动 nohup,并记录pid号

Linux后台进程启停脚本模板的更多相关文章

  1. Linux 程序启停脚本

    start.sh #!/bin/sh java -jar ./program.jar & echo $! > /var/run/program.pid stop.sh #!/bin/sh ...

  2. linux下的启停脚本

    linux下的根据项目名称,进行进程的启停脚本 #!/bin/bash JAVA=/usr/bin/java APP_HOME=/opt/program/qa/wechat APP_NAME=prog ...

  3. case编写的httpd简单启停脚本

    case编写的httpd简单启停脚本 #!/bin/bash HTTPD="/etc/init.d/httpd" . /etc/init.d/functions case &quo ...

  4. Oracle BIEE启停脚本

    作为BI的开发人员,经常启停BI服务在所难免,启动的过程又比较长,命令需要不同目录切换,简直烦死人呢, 特意整理了linux中的启动脚本,将以下脚本存成biee.sh,后面的过程就相当简单了, 启动: ...

  5. nginx启停脚本

    安装nginx时,源码包中未带官方的启动脚本,也就无法使用service nginxd start这种启动方式,查了下资料自己写了一个: #!/bin/bash #@version: #@author ...

  6. Oracle EBS R12的启停脚本

    以下脚本用root用户登录执行: 一.DB启停使用EBS提供的脚本ebs_start.shsu - oraprod -c "/d01/oracle/PROD/db/tech_st/10.2. ...

  7. python启停脚本的编写

    先占个位置,打算记录一下启停python 的脚本start.sh,stop.sh的写法. 内容包括启动python脚本的方式,日志的重定向,获取进程id,以及杀掉进程. 参考文章: http://bl ...

  8. mysql自己编写启停脚本

    一.场景 在实际生产环境中要求相对较高的企业对于root权限管控相对比较高,故而很多软件并非安装在root用户下(当然root用户权限也可管理,但正常情况下root权限并不会给业务使用方,而会给一个普 ...

  9. Linux weblogic启停

    一般weblogic启停在windows下很方便使用图标方式.但是在linux下需要杀掉weblogic进程才能真正关掉weblogic. 1.查询weblogic进程 ps -ef | grep & ...

  10. liunx weblogic服务启停脚本

    #!/bin/bash #sh xx.sh start xx项目 例如:sh autoWeblogic.sh start bius #经测试发现weblogic 启动大概需要完全启动成功35秒左右 停 ...

随机推荐

  1. [转帖]技术分享 | 国产麒麟 arm 上编译安装 xtrabackup8

    原创 发布于 2022-07-19 13:29:29 3220 举报 作者:王向 爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理.擅长数据库故障处理.对数据库技术 ...

  2. [转帖]神秘的backlog参数与TCP连接队列

    https://www.cnblogs.com/codelogs/p/16060820.html 简介# 这要从一次压测项目说起,那是我们公司的系统与另几家同行公司的系统做性能比拼,性能数据会直接影响 ...

  3. [转帖]SkyWalking集成logback

    1.引入skywalking的jar包,导入的包和agent版本一致 <dependency> <groupId>org.apache.skywalking</group ...

  4. [转帖]基本系统调用性能lmbench测试方法和下载

    简介 Lmbench是一套简易,可移植的,符合ANSI/C标准为UNIX/POSIX而制定的微型测评工具.一般来说,它衡量两个关键特征:反应时间和带宽. Lmbench旨在使系统开发者深入了解关键操作 ...

  5. [转帖]linux求数组的交集,shell/bash 交集、并集、差集

    方法一(直接用文件名):取两个文本文件的并集.交集.差集 并: sort -m 交: sort -m 差 file1 - file2: sort -m 方法二(用变量参数):取两个文本文件的并集.交集 ...

  6. [转帖]【JVM】Java内存区域与OOM

    引入 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. Java虚拟机运行时数据区 如图所示 1.程序计数器(线程私有 ...

  7. 简单监控Tomcat连接池大小的命令以及其他简单命令

    while true ; do date && echo "当前数据库连接池大小为:" $(jmap -histo `jps |grep caf |awk '{pr ...

  8. 分析fastcache和freecache(一)

    分析fastcache和freecache(一) fastcache和freecache是两个比较简单的缓存实现,下面分析一下各自的实现,并学习一下其实现中比较好的方式. fastcache 概述 f ...

  9. C++ Qt开发:TableWidget表格组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TableWi ...

  10. C/C++ 发送与接收HTTP/S请求

    HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议.它是一种无状态的.应用层的协议,用于在计算机之间传输超文本文档,通常在 Web 浏览器和 Web 服务器之 ...