天天看點

Centos7以普通使用者啟動zookeeper并加入開機自啟動服務

我的環境的zookeeper目錄為/opt/app/zk,假設我想以zookeeper使用者啟動

以下示例,在/etc/systemd/system/檔案夾下建立一個啟動腳本zookeeper.service

[Unit]
Description=zookeeper
After=syslog.target network.target

[Service]
Type=forking
Environment=ZOO_LOG_DIR=/opt/app/zk/log
ExecStart=/opt/app/zk/bin/zkServer.sh start
ExecStop=/opt/app/zk/bin/zkServer.sh stop
Restart=always
User=zookeeper
Group=zookeeper

[Install]
WantedBy=multi-user.target      

以上腳本重點内容在于Environment=ZOO_LOG_DIR=/opt/app/zk/log

為什麼要給ZOO_LOG_DIR指派呢?

打開bin/zkEnv.sh,搜尋ZOO_LOG_DIR,你會發現下面這段

if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="."      

這段腳本的意思是說ZOO_LOG_DIR如果未指定,則它的值為你啟動zookeeper時的目前目錄,而bin/zkServer.sh啟動時又是先調用zkEnv.sh,然後建立一個${ZOO_LOG_DIR}/zookeeper.out日志檔案,如果此時剛好普通使用者對該目錄沒有建立檔案的權限,則啟動時就會報錯,具體錯誤就是zookeeper.out...permison denied

是以我們利用Environment=ZOO_LOG_DIR=/opt/app/zk/log這條語句主動給ZOO_LOG_DIR指派(或者你直接在zkEnv.sh或zkServer.sh指定ZOO_LOG_DIR的值也是可以的),然後将zookeeper的目錄賦權給普通使用者:

chown -R zookeeper.zookeeper /opt/app/zk      

啟動zookeeper:

systemctl start zookeeper      

加入開機啟動:

systemctl enable zookeeper      

OK,搞定

轉載于:https://blog.51cto.com/kusorz/1920778

繼續閱讀