日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

在linux下创建自定义service服务

發布時間:2024/4/13 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在linux下创建自定义service服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三個部分

這個腳本分為3個部分:[Unit] [Service] [Install]。

Unit

Unit表明該服務的描述,類型描述。我們稱之為一個單元。比較典型的情況是單元A要求在單元B啟動之后再啟動。這種設置是通過Unit下面的Requires、After、Before、Wants來調整的。比如上述場景的編寫可以這樣(在A中編寫):

Requires=B` `After=B

這段設置表明了A的啟動依賴于B,同時有要求在B啟動之后啟動自己。設置十分簡介。需要注意的是,依賴關系通常用在服務(Service)而不是目標(Target)上。

Service

Service是腳本的關鍵部分,這一部分用于設置一些關鍵參數:

  • Type=forking: 后臺運行模式
  • PIDFile=/xxx/xxx.xxx: 存放PID文件的位置
  • ExecStart=/bin/echo xxx: 這是服務運行的具體執行命令
  • ExecReload=/bin/echo xxx: 這是服務重啟的執行命令
  • EexcStop=/bin/echo xxx: 這是服務停止的執行命令

Service的啟動方式,在Service段中,啟動方式使用Type指定。具體可以參考man systemd.service。

值得注意的是,在腳本中關于服務啟動、重啟、關閉的指令需要使用絕對路徑,否則會出現無法識別的情況。

當完成一個服務腳本后,我們就可以使用systemctl start|stop|restart xxx.service等指令了。若要開機啟動這個服務我們使用如下的指令:

  • systemctl enable xxx.service

若要關閉開機啟動:

  • systemctl disable xxx.service

當我們需要查看服務信息的使用可以使用如下指令:

  • systemctl list-units --type=service: 列出正在運行的服務

在service片段中有幾個概念很重要,這直接影響到實踐中創建自定義服務的最終結果。以下內容根據linux系統
中man systemd.service用戶手冊說明經過翻譯和整理而得。

service配置之Type

首先是Type配置,在service片段中有Type的配置,這個配置給當前的服務單元用于設置進程的啟動類型。
Type有如下幾種可選項:

  • simple
  • forking
  • oneshot
  • dbus
  • notify
  • idel

simple,這是默認的Type,當Type和BusName配置都沒有設置,指定了ExecStart設置后,simple就是默認的Type設置。simple使用ExecStart創建的進程作為服務的主進程。在此設置下systemd會立即啟動服務,如果該服務要啟動其他服務(simple不會forking),它們的通訊渠道應當在守護進程啟動之前被安裝好(e.g. sockets,通過sockets激活)。

forking,如果使用了這個Type,則ExecStart的腳本啟動后會調用fork()函數創建一個進程作為其啟動的一部分。當一切初始化完畢后,父進程會退出。子進程會繼續作為主進程執行。這是傳統UNIX主進程的行為。如果這個設置被指定,建議同時設置PIDFile選項來指定pid文件的路徑,以便systemd能夠識別主進程。

oneshot,onesh的行為十分類似simple,但是,在systemd啟動之前,進程就會退出。這是一次性的行為。可能還需要設置RemainAfterExit=yes,以便systemd認為j進程退出后仍然處于激活狀態。

dbus,這個設置也和simple很相似,該配置期待或設置一個name值,通過設置BusName=設置name即可。

notify,同樣地,與simple相似的配置。顧名思義,該設置會在守護進程啟動的時候發送推送消息(通過sd_notify(3))給systemd。

Service其他配置節點

  • RemainAfterExit:默認值no

默認值為no,這個設置采用booleean值,可以是0、no、off、1、yes、on等值。它表明服務是否應當被視為激活的,即便當它所有的進程都退出了。簡言之,這個設置用于告訴systemd服務是否應當是被視為激活狀態,而不管進程是否退出。當為true時,即便服務退出,systemd依然將這個服務視為激活狀態,反之則服務停止。

  • GuessMainPID

采用boolean值指定systemd在無法確切的查明服務的時候是否需要猜測服務的main pid。除非Type=forking被采用并且PIDFile沒有被設置,否則這個選項會被忽略。因為當設置為Type的其他選項,或者顯示的指定了PID文件后,systemd總是能夠知道main pid。

  • PIDFile

采用一個絕對路徑的文件名指定守護進程的PID文件。當Type=forking被設置的時候,建議采取這個設置。當服務啟動后,systemd會讀取守護進程的主進程id。systemd不會對該文件寫入數據。

  • BusName

使用一個D-Bus的總線名稱,作為該服務的可訪問名稱。當Type=dbus的時候,該設置被強制使用。

  • BusPolicy

如果該選項被指定,一個自定義的kdbus終結點將會被創建,并且會被指定為默認的dbus節點安裝到服務上。這樣的自定義終結點自身持有一個策略規則集合。這些規則將會在總線范圍內被強制指定。該選項只有在kdbus被激活時有效。

  • ExecStart

當服務啟動的時候(systemctl start youservice.service),會執行這個選項的值,這個值一般是“ExecStart=指令 參數”的形式。當Type=oneshot的時候,只有一個指令可以并且必須給出。原因是oneshot只會被執行一次。

  • ExecStartPre、ExecStartPost

顧名思義,這兩個設置的意義在于ExecStart被執行之前和之后被執行。

  • ExecReload

服務重啟時執行。

  • ExecStop

服務停止時執行。

  • ExecStopPost

服務停止后執行。

總結

以上是生活随笔為你收集整理的在linux下创建自定义service服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。