0. 引言
每次启动服务器都要手动启动es服务,相当之不方便,为此,书写一个脚本,实现es、kibana的开机自启
1. 原理
首先任何服务要实现开机自启,都可分为如下三步: 1、在/etc/init.d
目录下创建启动、关闭服务的脚本,脚本中要设置运行级别、启动优先级、关闭优先级等。
2、给脚本赋权,保证脚本能够执行
shell
chmod +x /etc/init.d/xxx
3、将脚本添加到开机自启列表
shell
# 添加开机自启
chkconfig --add xxx
# 状态设置为启动
chkconfig xxx on
注意:部分java服务,需要指定jdk路径,否则会报错找不到java
2. 实现
1、编写启动脚本
bash
cd /etc/init.d
vim elasticsearch
脚本内容
其中elastic
为自建的非root账号,专用于启动es、kibana;su - elastic
表示切换至elastic账号执行
shell
#!/bin/bash
#chkconfig: 2345 54 26
#description: elasticsearch
#processname: elasticsearch
ES_HOME=/var/local/elasticsearch
start(){
su - elastic -c "$ES_HOME/bin/elasticsearch -d -p pid"
echo "es is started"
}
stop(){
pid=`cat $ES_HOME/pid`
kill -9 $pid
echo "es is stopped"
}
status(){
ps aux | grep $ES_HOME
}
restart(){
stop
sleep 1
start
}
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
echo "支持指令:$0 start|stop|restart|status"
;;
esac
2、给脚本赋权
shell
chmod +x /etc/init.d/elasticsearch
3、执行脚本验证一下
shell
service elasticsearch status
service elasticsearch start
service elasticsearch stop
4、添加到开机自启列表
shell
# 添加开机自启
chkconfig --add elasticsearch
# 状态设置为启动
chkconfig elasticsearch on
5、同样书写kibana的启动脚本,同时也执行上述的赋权和添加开机列表指令
shell
vim kibana
脚本内容: 因为ps指令无法获取kibana pid,所以换了通过5601端口来查询进程id的方法,如果后续端口调整了,这里脚本也要调整
shell
#!/bin/bash
#chkconfig: 2345 55 27
#description: kibana
#processname: kibana
KIBANA_HOME=/var/local/kibana
start(){
su - elastic -c "nohup $KIBANA_HOME/bin/kibana >>/dev/null 2>&1 &"
echo "kibana is started"
}
stop(){
# 这里主要是通过网络端口5601寻找kibana进程的pid
kibana_pid_str=`netstat -tlnp |grep 5601 | awk '{print $7}'`
kibana_pid=`echo ${kibana_pid_str%%/*}`
kill -9 $kibana_pid
echo "kibana is stopped"
}
status(){
ps aux | grep $KIBANA_HOME
}
restart(){
stop
sleep 1
start
}
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
echo "支持指令:$0 start|stop|restart|status"
;;
esac
6、重启服务器,重启后直接访问kibana,查询正常,说明es和kibana都自动启动了,设置成功!