天天看點

對ruby服務設定自動重新開機,出錯并解決(記錄)

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 中文版

繼續閱讀