ElasticSearch系列---【es设置开机启动】

少年攻城狮 / 2024-03-03 / 原文

1.在/etc/systemd/system目录下创建elasticsearch1.service

注意:如果您的系统使用的不是Systemd,请根据您的init系统调整命令(如Upstart或SysVinit)。
如果在同一台机器启动多个节点,就按照本文再创建elasticsearch2.service就行了。

下面是elasticsearch1.service脚本内容
把目录/opt/app/middles/es/elasticsearch-7.8.0/替换成你的es安装目录

[Unit]
Description=es-node-1
Documentation=https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=simple
User=es
Group=es
WorkingDirectory=/opt/app/middles/es/elasticsearch-7.8.0/
ExecStart=/opt/app/middles/es/elasticsearch-7.8.0/bin/elasticsearch -p /opt/app/middles/es/elasticsearch-7.8.0/elasticsearch.pid
ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10

# Set environment variables
Environment=ES_HOME=/opt/app/middles/es/elasticsearch-7.8.0/
Environment=ES_PATH_CONF=/opt/app/middles/es/elasticsearch-7.8.0/config

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of processes
LimitNPROC=4096

# Specifies the maximum size of virtual memory
LimitAS=infinity

# Specifies the maximum file size
LimitFSIZE=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0

# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM

# Send the signal only to the JVM rather than its control group
KillMode=process

# Java process is never killed
SendSIGKILL=no

# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143

RuntimeDirectory=elasticsearch
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target

2.重新加载

systemctl daemon-reload

3.常用命令

#设置开机启动
systemctl enable elasticsearch1.service 

#启动es
systemctl start elasticsearch1.service 
#停止es
systemctl stop elasticsearch1.service 
#查看es状态
systemctl status elasticsearch1.service 

4.拓展

在systemd中指定服务启动顺序通常是通过单元文件的After和Requires指令来控制的。如果您有三个Elasticsearch节点的服务定义,并想要控制它们的启动顺序,您可以在每个服务的[Unit]部分使用这些指令。
这里有一个示例,如何按顺序启动三个名为es-node-1.service、es-node-2.service和es-node-3.service的Elasticsearch服务:
es-node-1.service 不需要特别指定启动顺序,因为它是第一个启动的。
es-node-2.service 应该在es-node-1.service之后启动。

[Unit]
Description=es-node-2
After=network-online.target es-node-1.service
Requires=es-node-1.service

es-node-3.service 应该在es-node-2.service之后启动。

[Unit]
Description=es-node-3
After=network-online.target es-node-2.service
Requires=es-node-2.service

通过这种方式,es-node-2.service将会等待es-node-1.service成功启动后才会启动,es-node-3.service也将会等es-node-2.service启动后才启动。

这里的指令解释:
After:确保目标服务在After中指定的服务之后启动。
Requires:如果在Requires中指定的服务没有运行,目标服务不会启动。
请注意,只有当所有服务单元文件都放在systemd的配置目录下(通常是/etc/systemd/system/),并且都被正确启用(使用systemctl enable命令)时,这些依赖才会生效。
如果您只是想要在启动时保持一个顺序,但服务之间并不相互依赖,那么只使用After指令也是足够的。如果服务之间存在依赖关系,那么我们建议使用Requires或者BindsTo指令来确保依赖服务的状态。