在初始部署MINIO时未考虑到服务自启动问题,导致服务器关机重启后MINIO未自动启动运行,进而影响到业务,为避免此问题再次发生,需要给MINIO配置自启动,评估考虑采用两种方案实现自启动
方案一:
在/etc/rc.local文件中配置MINIO的启动脚本
优点:简单快捷
缺点:只有机器重启时才会调度,如果机器没问题、服务挂掉了不会自动拉起
方案二:
使用systemd管理MINIO启停
优点:能解决机器没问题、服务挂掉时服务自启动问题,且能为MINIO提供启动、停止、重启、查看状态等命令工具
缺点:配置相对复杂
综合考虑决定使用方案二
配置步骤
一、分析现状
服务部署在/data/minio目录下,在/data/minio下有start.sh用来启动MINIO,在/data/minio下有stop.sh来关停MINIO
二、配置minio.service脚本
切换到root用户
到/etc/systemd/system目录下,新建minio.service文件
填入以下内容:
[Unit]
Description=MinIO
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/data/minio/minio
[Service]
Type=forking
WorkingDirectory=/data/minio/
#ExecUser
User=minio
Group=minio
ExecStart=/bin/bash /data/minio/start.sh
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
保存文件并退出
配置好后,执行以下命令,使配置生效
sudo chmod 755 minio.service
sudo systemctl daemon-reload
sudo systemctl enable minio.service
三、重启MINIO
用kill -9杀死当前运行的minio进程,并用systemctl start 启动minio。
参考指令如下:
# 切换到root用户
sudo -i
# ps -ef|grep minio 查看当前运行的minio进程号
ps -ef|grep minio
# minio 7119 1 0 Feb29 ? 00:18:31 /data/minio/minio ...
# kill -9 查出来的进程号,上述进程号为7119,每个环境的不一样,要注意替换
kill -9 7119
# 用systemd启动minio
sudo systemctl start minio
四、验证
用kill -9杀死当前minio进程,看是否会自动拉起;用systemctl stop、systemctl start、systemctl status验证systemd是否正常
参考指令如下:
# 切换到root用户
sudo -i
# ps -ef|grep minio 查看当前运行的minio进程号
ps -ef|grep minio
# minio 7119 1 0 Feb29 ? 00:18:31 /data/minio/minio ...
# kill -9 查出来的进程号,上述进程号为7119,每个环境的不一样,要注意替换
kill -9 7119
# ps -ef|grep minio 查看minio是否自启并生成了新的进程好
ps -ef|grep minio
# minio 27108 1 0 Feb29 ? 00:18:31 /data/minio/minio ...
# 用systemd停止minio
sudo systemctl stop minio
# ps -ef|grep minio 查看minio进程应该是无记录
ps -ef|grep minio
# 用systemd查看minio状态
sudo systemctl status minio
# 结果应为 Active: failed
# 用systemd启动minio
sudo systemctl start minio
# 用systemd查看minio状态
sudo systemctl status minio
# 结果应为 Active: active (running)
五、遇到的问题
配置完成后,在执行systemctl start minio时无法启动,报错如下:
-- The result is failed.
Apr 12 16:59:40 minio systemd[1]: Unit minio.service entered failed state.
Apr 12 16:59:40 minio systemd[1]: minio.service failed.
Apr 12 16:59:41 minio systemd[1]: minio.service holdoff time over, scheduling restart.
Apr 12 16:59:41 minio systemd[1]: Stopped MinIO.
-- Subject: Unit minio.service has finished shutting down
-- Defined-By: systemd
--
-- Unit minio.service has finished shutting down.
Apr 12 16:59:41 minio systemd[1]: start request repeated too quickly for minio.service
Apr 12 16:59:41 minio systemd[1]: Failed to start MinIO.
-- Subject: Unit minio.service has failed
-- Defined-By: systemd
--
-- Unit minio.service has failed.
--
-- The result is failed.
此问题是minio.service文件配置的
ExecStart=/data/minio/start.sh导致的,配置执行sh脚本时,需要带上bash服务全路径,改为
ExecStart=/bin/bash /data/minio/start.sh后,执行sudo systemctl daemon-reload重新加载minio.service即可