
linux后台启动进程并记录进程ID
发布日期:2021-05-07 04:26:11
浏览次数:22
分类:精选文章
本文共 1439 字,大约阅读时间需要 4 分钟。
环境
操作系统:win7
虚拟机:centos7需求
最近搭建了elasticsearch+kibana
,其中由于elasticsearch
官方自带后台启动,并且会产生pid
文件,所以我自己就写了脚本使其变成系统命令。可以参考:
但是,kibana
官方却没有自带后台启动的参数。假设使用&
的方式,虽然可以做到后台启动,但是却不能产生pid
文件。为什么一定要产生pid
文件呢?
Linux
的一种规范,你会发现,凡是你安装的比较正规的软件,都会产生pid
文件,它是用来记录进程的id
。也因此,也可以通过判断是否产生pid
来确定程序是否启动。不过,也正因为它只是一种规范,所以不是一定要遵守的,比如kibana
它启动时,就不会产生pid
文件。 手动写脚本,使其产生pid文件
启动kibana
官方命令是
bin/kibana
经过我多次测试后,自己手写的脚本:
#! /bin/bashecho "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" ];thennohup bin/kibana > kibana.log 2>&1 &echo "$!" > pidelif [ $1 == "stop" ];thenkill `cat pid`elseecho "Please make sure the position variable is start or stop."fi
再把脚本名去掉.sh
,就可以使用:
kibana start
停止命令:kibana stop
发表评论
最新留言
很好
[***.229.124.182]2025年03月26日 02时43分08秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
流量控制--2.传统的流量控制元素
2019-03-06
SNMP介绍及使用,超有用,建议收藏!
2019-03-06
SDUT2161:Simple Game(NIM博弈+巴什博弈)
2019-03-06
51nod 1596 搬货物(二进制处理)
2019-03-06
来自星星的祝福(容斥+排列组合)
2019-03-06
Hmz 的女装(递推)
2019-03-06
HDU5589:Tree(莫队+01字典树)
2019-03-06
不停机替换线上代码? 你没听错,Arthas它能做到
2019-03-06
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
2019-03-06
分库分表的 9种分布式主键ID 生成方案,挺全乎的
2019-03-06
MySQL不会丢失数据的秘密,就藏在它的 7种日志里
2019-03-06
Python开发之序列化与反序列化:pickle、json模块使用详解
2019-03-06
回顾-生成 vs 判别模型-和图
2019-03-06
采坑 - 字符串的 "" 与 pd.isnull()
2019-03-06
无序列表 - 链表
2019-03-06
SQL 查询强化 - 数据准备
2019-03-06
SQL 强化练习 (四)
2019-03-06
SQL 强化练习 (八)
2019-03-06
Excel 拼接为 SQL 并打包 exe
2019-03-06