在Ubuntu中添加諸如zookeeper這樣的service

咱們老是想着把本身的應用在系統啓動時自動啓動,可是咱們又不會寫init.d中的shell腳本,因此,不少時候很無奈地只能手動。如今好了,咱們有了systemd這樣的東東,咱們就很容易把事情給辦了。java

咱們先了解一下systemdredis

啓動服務:spring

$ sudo service zookeeper start

重啓服務:shell

$ sudo service zookeeper restart

關閉服務:ide

$ sudo service zookeeper stop

是否是很熟悉,看起來很不錯的樣子。spring-boot

那麼咱們怎麼把諸如zookeeper這樣的程序加進systemd中呢?rest

首先,咱們很瞭解一下systemd的配置放在哪裏,通常狀況下會在/etc/systemd/system中,在這個目錄中,會有大量的wantsservice日誌

其中wants表示依賴的基礎服務,這些咱們不用去管它。code

service則是要啓動的應用服務,這些纔是咱們去關注的。通常狀況下,每一個要啓動的服務都會以服務名加.service結尾,例如:ip

zookeeper.service
redis.service

每一個.service文件用來配置一個service,它們是一個文本文件,格式爲properties,下面就是一個zookeeper.service的例子:

[Unit]
# 服務說明
Description=zookeeper.service
# 在什麼服務以後啓動 - 服務依賴
After=network.target

[Service]
# 服務以什麼方式啓動,若是是shell腳本的方式,則Type=forking,不然不指定做何值(也就是去掉該配置項)
Type=forking
# 啓動環境參數,好比說JAVA_HOME的指定,而這裏指定zookeeper的日誌目錄爲/tmp
Environment=ZOO_LOG_DIR=/tmp
Environment=JAVA_HOME=/usr/local/jdk18
# 動啓命令
ExecStart=/opt/zookeeper/bin/zkServer.sh start
# 關閉命令
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
# 重啓命令
ExecReload=/opt/zookeeper/bin/zkServer.sh restart

[Install]
WantedBy=multi-user.target

好,如今咱們把這個.service文件放進/etc/systemd/system中,而後咱們還要告訴systemd咱們加入了新的service

$ sudo systemctl daemon-reload

若是要隨系統自動啓動,則還要加入下面的命令讓systemd知道要自動啓動該service

# 注意,須要在服務名後加.service後綴
$ sudo systemctl enable zookeeper.service

固然你也能夠關閉隨系統啓動這個功能:

$ sudo systemctl disable zookeeper.service

好,自此,你的service就加入到systemd中了,niubility吧?哈哈。

哦,若是是spring-boot這樣的貨呢?怎麼搞?

spring-boot官網的方法是搞不定的,至少我是搞不定,老是啓動不起來,就只好用最原始的方法,本身寫.service配置,這裏貼一份個人配置文件,以供參考:

[Unit]
Description=service.infrastructure
# 設定在zookeeper啓動以後再啓動
After=zookeeper.service

[Service]
User=kut
ExecStart=/usr/bin/java -Dspring.profiles.active=development -jar /home/kut/service-infrastructure-provider-1.0.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

整個配置重點在After配置這裏,由於我使用的是dubbodubbo依賴於zookeeper的啓動,因此要加這個配置,一樣,這個配置也能夠解決主機沒法正常重啓的問題。

相關文章
相關標籤/搜索