2015年11月5日 星期四

在 Linux CentOS 7 將 Gitblit 安裝成服務

一般想在開機後執行某個程式,可能會選擇將指令寫在 /etc/rc.local,
但有時要執行的程式跟系統服務有先後順序依賴關係(例如要網路啟動後,才能執行),
這時若直接寫在 /etc/rc.local,開機時可能會啟動失敗。

遇到此問題時,可將要執行的程式或指令,設定成系統服務,系統服務可照依賴關係,依正確順序啟動。

以下是將 Gitblit 安裝成系統服務的範例:
開機時想執行以下 shell script
/home/gitblit/gitblit.sh
內容如下
#!/bin/bash
cd /home/gitblit
java -jar gitblit.jar --baseFolder data

CentOS 7 使用 systemd 管理服務,
到 /usr/lib/systemd/system/ 資料夾底下新增一個 gitblit.service 檔案,
內容如下,設定在 network.target 之後啟動、且附掛在 multi-user.target 底下
[Unit]
Description=Gitblit
After=network.target

[Service]
#WorkingDirectory=/home/gitblit/
Type=simple
#若須指定執行的使用者、群組,可設定User、Group
#User=root
#Group=root
ExecStart=/home/gitblit/gitblit.sh
#ExecStart=/bin/bash /home/gitblit/gitblit.sh
#start執行的指令 
#ExecStart=/bin/bash /home/test-start.sh
#stop執行的指令
#ExecStop=/bin/bash /home/test-stop.sh
#Restart=no、on-success、on-failure、on-abnormal、on-abort、on-watchdog、always
Restart=always

[Install]
WantedBy=multi-user.target

新增完後,就可以用 systemctl 管理 gitblit.service 服務了
設定開機自動啟動
$ systemctl enable gitblit.service
啟動服務
$ systemctl start gitblit.service


其他範例:
設定網路硬碟掛載完,再啟動
[Unit]
Description=testName
After=remote-fs.target

[Service]
Type=simple
ExecStart=/bin/bash /home/nfs/test.sh

[Install]
WantedBy=remote-fs.target
若是修改,disable 再重新 enable
$ systemctl disable testName.service
$ systemctl enable testName.service


參考:
鳥哥的 Linux 私房菜 -- 第十七章、認識系統服務 (daemons)
openSUSE:How to write a systemd service
開機時,自動啟動Systemd的Service ─ 以Node.js Web Server為例 @ StarNight's Blog :: 隨意窩 Xuite日誌
systemd (简体中文) - ArchWiki
CentOS 7下systemd管理
Cause a script to execute after networking has started?
bash - linux start up script in systemd - Stack Overflow
How you create a systemd .mount file for bind mounts


沒有留言:

張貼留言