centos 7 新增系統服務{以zookeeper為例}
阿新 • • 發佈:2019-02-07
以下示例,在/etc/systemd/system/資料夾下建立一個啟動指令碼zookeeper.service
[Unit]
Description=zookeeper
After=syslog.target network.target
[Service]
Type=forking
Environment=ZOO_LOG_DIR=/usr/local/zookeeper/log //這裡必須填寫絕對路徑
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
Restart=always
User=zookeeper
Group=zookeeper
[Install]
WantedBy=multi-user.target
以上指令碼重點內容在於Environment=ZOO_LOG_DIR=/usr/local/zookeeper/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=/usr/local/zookeeper/log這條語句主動給ZOO_LOG_DIR賦值(或者你直接在zkEnv.sh或zkServer.sh指定ZOO_LOG_DIR的值也是可以的),然後將zookeeper的目錄賦權給普通使用者:
chown -R zookeeper.zookeeper /usr/local/zookeeper
啟動zookeeper:
systemctl start zookeeper