Linux后台进程启停脚本模板
![]()
目录
在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 ""
根据实际情况,将脚本模板中的xxx,arg1,arg2修改为对应的名称即可。
停止脚本
#!/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后台进程启停脚本模板的更多相关文章
- Linux 程序启停脚本
start.sh #!/bin/sh java -jar ./program.jar & echo $! > /var/run/program.pid stop.sh #!/bin/sh ...
- linux下的启停脚本
linux下的根据项目名称,进行进程的启停脚本 #!/bin/bash JAVA=/usr/bin/java APP_HOME=/opt/program/qa/wechat APP_NAME=prog ...
- case编写的httpd简单启停脚本
case编写的httpd简单启停脚本 #!/bin/bash HTTPD="/etc/init.d/httpd" . /etc/init.d/functions case &quo ...
- Oracle BIEE启停脚本
作为BI的开发人员,经常启停BI服务在所难免,启动的过程又比较长,命令需要不同目录切换,简直烦死人呢, 特意整理了linux中的启动脚本,将以下脚本存成biee.sh,后面的过程就相当简单了, 启动: ...
- nginx启停脚本
安装nginx时,源码包中未带官方的启动脚本,也就无法使用service nginxd start这种启动方式,查了下资料自己写了一个: #!/bin/bash #@version: #@author ...
- Oracle EBS R12的启停脚本
以下脚本用root用户登录执行: 一.DB启停使用EBS提供的脚本ebs_start.shsu - oraprod -c "/d01/oracle/PROD/db/tech_st/10.2. ...
- python启停脚本的编写
先占个位置,打算记录一下启停python 的脚本start.sh,stop.sh的写法. 内容包括启动python脚本的方式,日志的重定向,获取进程id,以及杀掉进程. 参考文章: http://bl ...
- mysql自己编写启停脚本
一.场景 在实际生产环境中要求相对较高的企业对于root权限管控相对比较高,故而很多软件并非安装在root用户下(当然root用户权限也可管理,但正常情况下root权限并不会给业务使用方,而会给一个普 ...
- Linux weblogic启停
一般weblogic启停在windows下很方便使用图标方式.但是在linux下需要杀掉weblogic进程才能真正关掉weblogic. 1.查询weblogic进程 ps -ef | grep & ...
- liunx weblogic服务启停脚本
#!/bin/bash #sh xx.sh start xx项目 例如:sh autoWeblogic.sh start bius #经测试发现weblogic 启动大概需要完全启动成功35秒左右 停 ...
随机推荐
- [转帖]TiDB BR 备份至 MinIO S3 实战
https://tidb.net/blog/3a31d41d#3.%E9%83%A8%E7%BD%B2%20MinIO%20S3%20%E5%8F%8A%E5%A4%87%E4%BB%BD%E6%81 ...
- [转帖]Linux终端:用cat命令查看不可见字符
https://developer.aliyun.com/article/80607 printf 'testing\012\011\011testing\014\010\012more testin ...
- [转帖]读懂什么是RDMA
https://blog.csdn.net/tony_vip?type=blog 一.什么是RDMA1.RDMA主要体现 2.如何理解RDMA和TCP技术的区别?3.使用RDMA的好处包括: ...
- 【转帖】Linux性能优化(十三)——CPU性能测试
一.CPU上下文切换测试场景 使用sysbench模拟多线程调度: sysbench --threads=10 --time=300 threads run 使用vmstat查看CPU上下文切换: c ...
- [转帖]Windows磁盘性能压测(1)-DiskSpd
http://www.manongjc.com/detail/59-xrydhtisrajqsxn.html 本文章向大家介绍Windows磁盘性能压测(1)-DiskSpd,主要内容包括其使用实例. ...
- [转帖]Java 类加载器
类的生命周期和加载过程 在Java中数据类型分为基本数据类型和引用数据类型.基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载.引用类型,Java 将其细分为四种:类.接口.数组类和泛型 ...
- [转帖]JAVA⽣态的微服务⽆侵⼊链路追踪
https://v5.6-docs.rainbond.com/docs/v5.3/advanced-scenarios/devops/pinpoint/#pinpoint%E7%AE%80%E4%BB ...
- cookie的设置读取
<script> // 设置cookie值哈 let username = '我是cookie' document.cookie = "name=" + usernam ...
- NetCore高级系列文章01---创建项目及配置文件
.NET Core是适用于 Windows.Linux 和 macOS 的免费.开源托管的计算机软件框架,作为.NET开发人员,全面拥抱.NetCore将成为趋势. 本系列文章将分为两大部分讲解.Ne ...
- RC4加密技术探究:优缺点与实战应用
引言 在网络安全领域,加密技术一直是保障数据安全的重要手段.Rivest Cipher 4(简称RC4)作为一种对称加密算法,自20世纪80年代以来广泛应用于各种网络安全协议中.本文将详细分析RC4加 ...