rails之類的服務通過systemd設定網上資料蠻多的,下面内容也許隻能做簡單參考。
日前,安裝一個靜态文檔模闆slate,該程式是使用通過ruby寫的,slate項目github位址:https://github.com/lord/slate 。安裝過程,所需依賴版本,在此網址均有描述,在此不再複述。
本來安裝完并沒有考慮讓其自動重新開機,但因其挂掉頻率過高,故考慮之。
在/etc/systemd/system目錄下編輯檔案:
# cat slate-server.service
[Unit]
Description=slate_server container
[Service]
Restart=always
WorkingDirectory=/home/slate
ExecStart=/usr/local/rvm/gems/ruby-2.3.0/bin/bundle exec /usr/local/rvm/gems/ruby-./bin/middleman server
[Install]
WantedBy=default.target
如上所示
Restart=always
意為一直重新開機,
WorkingDirectory=/home/slate
意為在該目錄下啟動此服務(bundle需要在此目錄下查找Gemfile檔案,middleman需要在此目錄下查找config.rb檔案),
ExecStart=/usr/local/rvm/gems/ruby-2.3.0/bin/bundle exec /usr/local/rvm/gems/ruby-2.3.0/bin/middleman server
意思更明顯,意為啟動時使用此指令。書寫完畢後,執行如下指令:
# systemctl daemon-reload
# systemctl enable slate-server.service
# systemctl start slate-server.service
# systemctl status slate-server.service
會發現啟動失敗,通過如下指令,檢視詳細錯誤報告:
檢視後你會發現啟動時不知道ruby路徑,變添加路徑:
# cat slate-server.service
[Unit]
Description=slate_server container
[Service]
Restart=always
WorkingDirectory=/home/slate
Environment=PATH=/usr/local/rvm/gems/ruby-2.3.0/bin:/usr/local/rvm/gems/ruby-.@global/bin:/usr/local/rvm/rubies/ruby-./bin:/usr/local/rvm/bin
ExecStart=/usr/local/rvm/gems/ruby-2.3.0/bin/bundle exec /usr/local/rvm/gems/ruby-./bin/middleman server
[Install]
WantedBy=default.target
執行之前的systemctl指令,還是發現執行不了,沒轍了,隻得google了。。。。。
找到了這麼個網址:https://github.com/mperham/sidekiq/blob/master/examples/systemd/sidekiq.service 看到了這麼一句
ExecStart=/bin/bash -lc 'bundle exec sidekiq -e production'
而且并沒有加PATH路徑,故先嘗試吧,再找原因,修改slate-server.service檔案内容如下:
# cat slate-server.service
[Unit]
Description=slate_server container
[Service]
Restart=always
WorkingDirectory=/home/slate
ExecStart=/bin/bash -lc 'bundle exec middleman server'
[Install]
WantedBy=default.target
執行之前的systemctl指令發現執行成功了!
對此,
ExecStart
為什麼這麼寫,就需要man了。
man bash
查找-l 和-c 選項意義。man文檔對此介紹的内容較多,在此,不便複述,若不願檢視篇幅較長的英文文檔,可百度
man bash 中文版
。