打包elasticsearch镜像:
start.sh
#!/bin/bash
/bin/cd /usr/local/elasticsearch/bin/ && /bin/su esuser && /bin/sh /usr/local/elasticsearch/bin/elasticsearch
su esuser
source /etc/profile
./elasticsearch -d
tail -f /usr/local/elasticsearch/logs/elasticsearch.log
docker run -it -p 9200:9200 -p 9300:9300 60.9.4.21:5000/java-es:latest /bin/bash
===================================================================================================
dockerfile
cat << EOF
FROM 60.9.4.21:5000/java
COPY ./ /workspace
CMD ["/workspace/start.sh"]
EOF
) > ./Dockerfile
===================================================================================================
elasticsearch.service
这一份配置中要指定JAVA_HOME的环境变量;指定用特定用户esuser启动;Exec地址要写绝对路径;后台启动;启动之前先启动网络服务;延迟五秒在启动
cat /usr/lib/systemd/system/elasticsearch.service
[Unit]
Description=elasticsearch-server
After=network.target
[Service]
User=esuser
Group=esuser
Type=forking
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_191/"
ExecStart=/bin/sh -c '/usr/local/elasticsearch/bin/elasticsearch -d'
ExecStop=kill -9 $(pidof elasticsearch-server)
ExecReload=kill -9 $(pidof elasticsearch-server) && /bin/sh -c '/usr/local/elasticsearch/bin/elasticsearch -d'
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=/var/es/out.log
LimitCORE=infinity
LimitFSIZE=infinity
LimitNOFILE=65536
LimitNPROC=65536
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
PrivateTmp=true
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
vi /etc/sysctl.conf
vm.max_map_count=262144
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
sysctl -p
重启配置文件
systemctl daemon-reload
systemctl status elasticsearch
systemctl start elasticsearch
这样可以使用systemctl启动服务了。
systemctl enable elasticsearch 开机自启动
systemctl disable elasticsearch 开机自启动
systemctl list-unit-files 查看开机自启项
docker commit -a="y" -m="finished" 2c569072bcef 60.9.4.21:5000/es:latest #将当前容器打包镜像
docker tag 2c569072bcef 60.9.4.21:5000/es:latest #将镜像命名为60.9.4.21:5000/es:latest
docker push 60.9.4.21:5000/es:latest #将镜像推送至私服
镜像名为60.9.4.21:5000/es:latest
docker run -it -d --privileged=true -p 9200:9200 -p 9300:9300 60.9.4.21:5000/es:latest #拉取并以特权模式运行容器
curl localhost9200 #访问测试
进入容器:# docker exec -it 2c569072bcefbb /bin/bash
参数解释:
只要使用Systemd这个进程作为启动进程的linux系统,其子进程都会有PrivateTmp这么一个属性,用于设置是否使用私有的tmp目录。
例如:nginx会有一个/systemd/system/nginx.service/tmp目录
作用:PrivateTmp=ture表示开启此属性
把各个service的tmp目录隔离开的话,可以保证一定的安全性。
对于每个service的tmp目录,会在服务启动(start)时创建该目录,并且在关闭(stop)服务时删除该目录。如果我们是使用自己定义的临时目录路径的话,就需要我们自己定义相关的维护机制了(如:定期删除这些临时文件等),而使用这个PrivateTmp的话,就不需要我们自己去维护了。
After=network.target #启动顺序,在network之后启动
Wants=network.target #依赖关系,wants 表示若依赖,requires 表示强依赖,即network.target如果启动失败,elasticsearch也会退出
Restart=on-failure #重启的方式 ,elasticsearch任何意外的失败,都会重启
Restart=always
RestartSec=5
这两句话,能够在服务挂掉之后自动重启。
PrivateTmp=true
# 指定此进程可以打开的最大文件数
LimitNOFILE=65535
# 指定此进程可以打开的最大进程数
LimitNPROC=65535
# 最大虚拟内存
LimitAS=infinity
# 最大文件大小
LimitFSIZE=infinity
# 超时设置 0-永不超时
TimeoutStopSec=0
# SIGTERM是停止java进程的信号
KillSignal=SIGTERM
# 信号只发送给给JVM
KillMode=process
# java进程不会被杀掉
SendSIGKILL=no
# 正常退出状态
SuccessExitStatus=143
===================================================================================================
Linux 服务管理两种方式service和systemctl
service命令构建:/etc/init.d目录建立一个文件elasticsearch 语法:service elasticsearch start
systemctl命令构建:在/usr/lib/systemd/system目录建立一个文件elasticsearch.service 语法:systemctl status elasticsearch
systemd对应的进程管理命令是systemctl
systemctl命令兼容了service即systemctl也会去/etc/init.d目录下,查看,执行相关程序
===================================================================================================
es配置文件加上:
network.host: 0.0.0.0
discovery.seed_hosts: ["0.0.0.0"]
system下srevice的配置-/bin/sh -c "/usr/local/elasticsearch/bin/elasticsearch --fail --no-block default"
===================================================================================================
不切换用户启动:
su - esuser -c /usr/local/elasticsearch/bin/elasticsearch
绝对路径启动:
/bin/sh -c "/usr/local/elasticsearch/bin/elasticsearch"
/bin/cd
/bin/su
/bin/cp
查看开机自启项
systemctl list-unit-files
===================================================================================================
报错:IllegalStateException: failed to obtain node locks, tried [[/usr/local/***
原因:报错原因:没有正常停止elasticsearch
解决:①ps aux | grep elasticsearch②kill -9 进程号③重启./bin/elasticsearch -d
===================================================================================================
指定某个用户:systemctl --user start elasticsearch
1.使用echo命令查看单个环境变量。例如:echo $PATH
2.使用env查看所有环境变量。例如:env
3.使用groups查看用户所属用户组。例如:groups esuser
4.把用户添加进入root组。 例如:usermod -a -G root esuser 那么esuser就在两个组都有。示例:groups esuser root
docker删除所有容器/镜像
docker stop $(docker ps -a -q) #停止所有容器
docker rm $(docker ps -a -q) #删除所有容器
docker rmi $(docker images -q) #删除所有镜像
参数解释:-a :显示所有的容器,包括未运行的; -q :静默模式,只显示容器编号; docker ps -a -q = docker container ls -a -q
journalctl -f #查看systemctl命令打印的日志
版权归原作者 fuqinderen1 所有, 如有侵权,请联系我们删除。