目录

在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. [转帖]kingbase(人大金仓)的一些常用表操作语句

    包括 1)创建表 2)删除表 3)加字段 4)字段换名 5)字段改类型 6)字段添加注释 7)修改字段为自增类型 8)增加主键 9)查看模式下的表 一.创建和删除表 DROP TABLE IF EXI ...

  2. [转帖]Linux AWK工作原理

    https://www.cnblogs.com/yeyuzhuanjia/p/13967513.html 本篇文章我们主要为大家介绍 AWK 是如何工作的. AWK 工作流程可分为三个部分:1.读输入 ...

  3. CPU实际频率查看

    cat /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_cur_freq

  4. [转帖]45个处理字符串的Python方法

    https://baijiahao.baidu.com/s?id=1738413163267646541&wfr=spider&for=pc   一.题目解析 先来看一个题目: 判断用 ...

  5. 银河麒麟v10 安装 virt-manager 的过程

    上个月公司购置一台飞腾2000+ 银河麒麟v10的机器. 想着能够利用虚拟化 安装一下虚拟机 提高测试灵活度 找了一下原厂要了一下相关的命令 在这里进行一下测试工作. 第一步: 安装必备的包 yum ...

  6. Edge启动页面被篡改为hao123.com问题解决

    零:问题 当打开edge的时候,默认启动了hao123.com 壹:思路 在edge中设置启动页面为baidu.com 查看是否是快捷方式被篡改, 确定是否是电脑管家锁定了主页为hao123.com ...

  7. css中也可以使用变量了?

    前言 大家都听说过变量,我们学习的任何语言都有变量的存在. css中是否也存在变量呢? 也许很多小伙伴也是通过less,scss中来使用css变量 其实在css中也是有变量的,今天我们也来学习一下. ...

  8. 使用JSON.stringify()去实现深拷贝,要小心哦,可能有巨坑

    对象中有时间类型的时候(时间类型会被变成字符串类型数据) const obj = { date: new Date() } console.log(typeof obj.date === 'objec ...

  9. 【VictoriaMetrics的vmbackupmanager】这个一年卖 2 万美元的功能,我做出来了

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 1.背景 在可观测领域的 metrics 解决方案中,Vi ...

  10. k8s 中的网络

    k8s 中的网络模型 CNI 网络插件 CNI 的设计思想 k8s 中的三层网络 Flannel 的 host-gw Calico 参考 k8s 中的网络模型 CNI 网络插件 docker 容器的网 ...