關于配置Minio的一點小問題
Minio是個分布式對象存儲器,一般搭配NGINX做負載均衡當個圖檔存儲,小檔案存儲啥的,然後建立連接配接,确定桶的名字,再根據對象名字取出對象,或者存入對象,有時候還會搭配es什麼的存下路徑啥的。
今天在linux上配置minio服務,應該是個挺簡單的事情,直接
minio serve -C [配置目錄] --address[端口] [資料目錄]
不過一般不能這麼用
寫一個start.sh吧。
#start.sh
#!/bin/bash
export MINIO_ACCESS_KEY=xxx
export MINIO_SECRET_KEY=xxx
nohup ./minio server --address :9000 --config-dir ./conf ./data > ./minio.log 2>&1 & (--config-dir 一般可以用-C表示)
寫了start.sh當然也要寫stop.sh吧,可是minio是沒有stop指令的,如果用docker或者它的那個mc的用戶端就好用多了。
#stop.sh
kill `netstat -nlp | grep :9000 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
這段指令是我抄的,思路大緻是找到pid然後殺掉,這個awk ‘{print $7}’ 會找到一個類似 [pid]/minio 形式的串,awk -F"/" '{ print $1 } 就是根據“/”分割取出pid了。但是還是感覺太low了,每次啟動關閉服務都要什麼whereis 然後cd啥的
于是試了下使用服務形式的minio.service,一般來說有兩種,一種是基于init.d檔案的加入服務,一種是基于systemd的服務注冊,這裡采用了第二種。
直接将一個名為minio.service的unit檔案丢到/etc/systemd/system/裡去
[Unit]
Description=MinIO #名稱
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target #配置運作檔案位址
AssertFileIsExecutable=/data/minio/minio
[Service]
User=root
Group=root
EnvironmentFile=-/data/minio/conf/minio.conf #指定配置檔案
ExecStart=$PATH/minio server $MINIO_OPTS $MINIO_VOLUMES #按照配置檔案方式指定運作
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
詳細的說明可以看這篇unit檔案格式說明 ,具體配置時注意删除注釋。
然後systemctl daemon-reload ,systemctl start minio.service balabal… 然後有一個很奇怪的問題,那就是這個environmentFile怎麼都加載不出來,一直報什麼failed to run ‘start’ task: No such file or directory 什麼的,後來發現給environmentFile加了一個"-“符号就好了,這個”-"符号什麼意思,百度了一下,具體含義有以下
這裡的含義估計是上一次工作目錄,上一次工作目錄什麼意思?我這裡寫的難道不是絕對路徑嗎?總之很奇怪,然而搜了下stackflow,發現還是國外老哥給力
意思是說這在systemd.exec中有提及,如果“-”指向的檔案不存在就不會去讀這個檔案,也不會報錯,那麼我的問題出在哪裡呢
仔細檢查後發現有個語句後面注釋沒有去掉,可以說是千裡之堤毀于蟻穴了。
有關systemd的官方文檔位址這裡可以找到。