linux后台启动进程并记录进程ID

45 篇文章 0 订阅
24 篇文章 0 订阅

环境

操作系统:win7
虚拟机:centos7

需求

最近搭建了elasticsearch+kibana,其中由于elasticsearch官方自带后台启动,并且会产生pid文件,所以我自己就写了脚本使其变成系统命令。可以参考:

将自己写的es脚本变成系统的新命令

但是,kibana官方却没有自带后台启动的参数。假设使用&的方式,虽然可以做到后台启动,但是却不能产生pid文件。为什么一定要产生pid文件呢?
因为这是Linux的一种规范,你会发现,凡是你安装的比较正规的软件,都会产生pid文件,它是用来记录进程的id。也因此,也可以通过判断是否产生pid来确定程序是否启动。不过,也正因为它只是一种规范,所以不是一定要遵守的,比如kibana它启动时,就不会产生pid文件。

手动写脚本,使其产生pid文件

启动kibana官方命令是

bin/kibana

经过我多次测试后,自己手写的脚本:

#! /bin/bash
echo "current PID: $$" #这句删除也可以
#cp /dev/null kibana.log 
bin/kibana  > kibana.log 2>&1 &
echo "$!"
echo "$!" > pid #将上一个后台进程写入到pid文件中

分析:

bin/kibana  > kibana.log 2>&1 &

这句话的作用就是 启动kibana,并且后台启动,将标准输出和标准错误信息重定向kibana.log文件中。
进一步分析就是:

bin/kibana  > kibana.log # 将标准输出写入kibana.log中
2>&1 # 将标准错误信息重定向到标准输出中
& # 后台启动,但是假设关闭终端CRT,启动的程序也会停止
#可以使用nohup,即使关闭终端,程序也不会停止
nohup bin/kibana  > kibana.log 2>&1 &

shell 内置参数 $!

上面脚本中$$$!是内置。
$$表示的是当前进程id
$!表示的是上一个后台进程

所以echo "$!"这句一定要放到启动kibana命令的后面。echo "$!" > pid就是将上一个后台进程ID也就是kibana的进程id重定向到pid中。
重定向时,会先去判断文件pid是否存在。假设不存在,会自动创建,并且每次都是重新写入,而不是追加。

执行脚本:

./kibana.sh

就会产生pid文件。

并且启动时,产生的日志都会重定向到kibana.log中。(kibana.log也是自己创建的)


如果不想每次都进入kibana目录来启动kibana,可以把自己写的脚本放到usr/bin中,使其变成系统命令。

①把脚本放到usr/bin的目录中
②调整好脚本

调整后的脚本:

#!/bin/bash
# 先进入相关目录
cd /usr/programe_files/kibana-5.2.2/
if [ $1 == "start" ];then
nohup bin/kibana  > kibana.log 2>&1 &
echo "$!" > pid
elif [ $1 == "stop" ];then
kill `cat pid`
else
echo "Please make sure the position variable is start or stop."
fi

再把脚本名去掉.sh,就可以使用:
启动命令:kibana start
停止命令:kibana stop

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山鬼谣me

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值