但有時要執行的程式跟系統服務有先後順序依賴關係(例如要網路啟動後,才能執行),
這時若直接寫在 /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
沒有留言:
張貼留言