1. 程式人生 > >centos 7 新增系統服務{以zookeeper為例}

centos 7 新增系統服務{以zookeeper為例}

原文地址

以下示例,在/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