如何在啟動時用systemd執行linux程式

需要在引導時啟動Linux程式嗎?systemd軟體提供了一種方法,可以在任何Linux發行版上使用systemd來完成這一操作,而systemd是目前大多數版本的版本,包括Ubuntu。我們將帶領您完成建立整合服務的過程,甚至與雜誌進行對話。...

需要在引導時啟動Linux程式嗎?systemd軟體提供了一種方法,可以在任何Linux發行版上使用systemd來完成這一操作,而systemd是目前大多數版本的版本,包括Ubuntu。我們將帶領您完成建立整合服務的過程,甚至與雜誌進行對話。

本教程演示如何設定啟動系統時啟動的系統服務。要在登入時啟動圖形程式,請改用桌面的啟動管理器。

啟動時執行程式

有時,您在計算機上安裝的軟體會將自己連線到Linux啟動過程中,這樣程式在每次啟動計算機時都會自動啟動。您可以輕鬆地透過自己的程式和指令碼,或者實際上計算機上的任何其他程式來實現相同的行為。

啟動時啟動的程式由系統和****器systemd控制。systemd是啟動時執行的第一個程序。它始終具有程序ID(PID)1。計算機中執行的其他每個程序都由systemd啟動,或者由systemd已經啟動的程序啟動。

在後臺執行的程式稱為守護程式或服務。systemd末尾的“d”代表守護程序。在本文中,我們將建立一個示例服務。要勾選所有方框,我們的服務必須是:

  • 透過服務單元檔案與systemd整合
  • 啟動時啟動
  • 使用systemd的控制介面systemctl進行控制
  • 能夠寫日記

建立服務程式

我們需要一個systemd會啟動的程式。我們將建立一個簡單的指令碼,稱為“htg.sh公司”. 本教程使用Gedit文字編輯器,但是您可以使用任何您喜歡的文字編輯器。

touch htg.sh gedit htg.sh

如何在啟動時用systemd執行linux程式

gedit編輯器將開啟。將以下文字複製並貼上到編輯器中。

#!/bin/bash echo "htg.service: ## Starting ##" | systemd-cat -p info while : do TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') echo "htg.service: timestamp ${TIMESTAMP}" | systemd-cat -p info sleep 60 done

儲存更改並關閉編輯器。

如何在啟動時用systemd執行linux程式

劇本做的不多,但有幾點值得注意。

  • 這兩條迴音線透過systemdcat傳輸,這是一個從程式中獲取輸出並將其傳送到日誌的程式。日記賬分錄優先。我們使用-p(priority)選項來表示我們的訊息僅供參考(info)。它們不是重要的錯誤或警告。
  • 有一個無休止的while迴圈。
  • TIMESTAMP變數設定為當前日期和時間。這將被格式化為一條訊息併發送到日誌。
  • 然後指令碼休眠60秒。
  • 60秒後重復迴圈。因此,這個指令碼每分鐘向日志寫入一條帶時間戳的訊息。

我們將指令碼複製到/usr/local/bin目錄。

sudo cp htg.sh /usr/local/bin

如何在啟動時用systemd執行linux程式

我們需要讓它可執行:

sudo chmod +x /usr/local/bin/htg.sh

如何在啟動時用systemd執行linux程式

建立服務單元檔案

由systemd啟動的每個程式都有一個定義檔案,稱為服務單元檔案。它包含某些屬性,systemd可以使用這些屬性來定位和啟動程式,並定義其某些行為。

我們需要為我們的新服務建立一個單元檔案,但是要確保現有的單元檔案中沒有一個具有我們想要為我們的新服務命名的名稱是謹慎的。

sudo systemctl list-unit-files --type-service

如何在啟動時用systemd執行linux程式

您可以滾動瀏覽按字母順序排列的單位檔案列表,並檢查是否未使用要使用的名稱。

如何在啟動時用systemd執行linux程式

我們的服務將被稱為“htg服務”. 沒有單位檔案有這個名稱,所以我們可以繼續建立我們的單位檔案。

sudo gedit /etc/systemd/system/htg.service

如何在啟動時用systemd執行linux程式

gedit編輯器將開啟。將以下文字複製並貼上到編輯器中:

[Unit] Description=How-To Geek Service Example Wants=network.target After=syslog.target network-online.target [Service] Type=simple ExecStart=/usr/local/bin/htg.sh Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target

儲存更改並關閉編輯器。

如何在啟動時用systemd執行linux程式

這些條目具有以下含義。這些是典型的條目。我們的簡單服務實際上並不需要它們中的大多數,但是包含它們可以讓我們解釋它們。

  • 描述:這是您的服務的文字描述。
  • 想要:我們的服務想要但不需要在我們的服務啟動前啟動網路。
  • After:此服務成功啟動後(如果尚未執行)應啟動的單元名稱列表。
  • 型別:簡單。一旦ExecStart指定的程序被分叉,systemd就會認為這個服務已經啟動。
  • ExecStart:應該啟動的程序的路徑。
  • 重新啟動:何時以及是否應該重新啟動服務。我們把它設為“失敗時”
  • RestartSec:在嘗試重新啟動服務之前要等待多長時間。此值以秒為單位。
  • KillMode:定義如果我們請求systemctl停止服務,systemd應該如何終止程序。我們將其設定為“程序”。這將導致systemd僅在主程序上使用SIGTERM訊號。如果我們的服務是一個非平凡的程式而不是一個簡單的指令碼,我們會將其設定為“混合”以確保任何派生的程序也被終止。
  • WantedBy:我們把這個設定為“多-使用者.目標,這意味著只要系統處於多個使用者可以登入的狀態,不管是否有圖形使用者介面可用,都應該啟動服務。

單元檔案不需要可執行,但對單元檔案的許可權應該限制誰可以編輯它。您不希望惡意或惡意使用者更改單元檔案,以便它完全執行不同的程式。

此命令將授予所有者讀寫許可權,以及對組的讀許可權。其他人將沒有許可權。

sudo chmod 640 /etc/systemd/system/htg.service

如何在啟動時用systemd執行linux程式

我們可以讓systemctl檢查單元檔案的語法,即使服務還沒有執行。將報告任何錯誤。(實際上,.service”部分對於大多數命令是可選的。)

systemctl status htg.service

如何在啟動時用systemd執行linux程式

沒有突出顯示錯誤,這意味著我們的單元檔案語**確。

啟動服務

新增新單位檔案或編輯現有單位檔案時,必須通知systemd重新載入單位檔案定義。

sudo systemctl daemon-reload

如果要在啟動時啟動服務,必須啟用它:

sudo systemctl enable htg

啟用服務不會啟動它,它只會將它設定為在啟動時啟動。要立即啟動服務,必須將systemctl與start選項一起使用。

sudo systemctl start htg

如何在啟動時用systemd執行linux程式

驗證服務

手動啟動服務或重新啟動計算機後,我們可以驗證服務是否正常執行。

sudo systemctl status htg.service

如何在啟動時用systemd執行linux程式

將為我們顯示服務的狀態。

如何在啟動時用systemd執行linux程式

  • 綠點意味著我們的服務已經啟動並順利執行。
  • 服務的名稱是“htg服務,並且詳細的描述是我們在單位檔案中提供的。
  • 我們將看到哪個單位檔案已載入“/etc/systemd/system”/htg服務”.
  • 服務處於活動狀態,併為我們列出了啟動服務的時間。
  • 它的PID是7762。
  • 有兩個任務與服務關聯。
  • 該服務總共使用了928千位元組的記憶體。
  • 對照組包括htg.sh公司指令碼和sleep命令,該命令已由啟動htg.sh公司“大多數情況下,sleep命令將執行此服務的工作。

我們還顯示了該服務生成的最後10個日記賬分錄。不出所料,他們都相隔一分鐘。

停止和禁用服務

如果需要停止服務,可以使用以下命令:

sudo systemctl stop htg.service

如何在啟動時用systemd執行linux程式

這會停止服務,但不會阻止它在下次重新啟動計算機時重新啟動。要停止啟動時啟動的服務,您需要禁用它:

sudo systemctl disable htg.service

如何在啟動時用systemd執行linux程式

如果服務正在執行,此命令不會停止它。它只是告訴systemd不要在下次重新啟動時啟動服務。

如果要停止服務並阻止它在啟動時啟動,請同時使用這兩個命令。

服務提示

在嘗試將程式作為服務啟動之前,請確保程式按預期執行。

  • 發表於 2021-04-01 17:43
  • 閱讀 ( 48 )
  • 分類:網際網路

你可能感興趣的文章

Windows10中7種修復緩慢啟動時間的方法

... 看點:你的虛擬記憶體太低了嗎?下面是如何修復它! ...

  • 發佈於 2021-03-11 02:02
  • 閲讀 ( 57 )

如何阻止windows 10在啟動時重新開啟上次開啟的應用程式

... 如何阻止windows 10在啟動時重新開啟上次開啟的應用程式 ...

  • 發佈於 2021-03-12 10:06
  • 閲讀 ( 40 )

什麼是容器linux?您應該使用它嗎?

... systemd ...

  • 發佈於 2021-03-15 05:37
  • 閲讀 ( 49 )

如何控制linux啟動服務和守護程序

... 然而,一旦Debian(Ubuntu軟體包的上游源)切換到systemd,Canonical決定也這樣做。Ubuntu 15.04(生動的Vervet)的釋出是第一個預設情況下使用新的啟動系統的版本。 ...

  • 發佈於 2021-03-15 11:22
  • 閲讀 ( 50 )

沒有systemd的linux:為什麼要使用devuan,debian fork

您可能會對Linux社群的危機感到驚訝。幾年前,systemd init系統的建立加重了許多開發人員和使用者的負擔。大多數基於Linux的作業系統都採用了systemd,但也有一些選擇了另一種方法。 ...

  • 發佈於 2021-03-24 05:46
  • 閲讀 ( 40 )

如何使用windows10啟動資料夾:您需要知道的一切

... 讓我們看看在哪裡可以找到windows10啟動資料夾,它是如何工作的,以及您應該和不應該在其中包含的程式。 ...

  • 發佈於 2021-03-25 00:51
  • 閲讀 ( 50 )

如何在啟動時執行windows 10應用商店應用程式

...讓你的電腦感覺更快,省得你點選六個圖示。你可能知道如何設定正常的桌面程式在啟動時執行,但Windows10應用商店的應用程式呢? ...

  • 發佈於 2021-03-25 23:51
  • 閲讀 ( 41 )

沒有systemd的最佳linux發行版

當主流Linux發行版採用systemd時,異議者會分叉分發並啟動新專案。那麼,如果您正在尋找非系統發行版,您有什麼選擇?我們來看看。 系統D:快速回顧 在歷史上,Linux系統中的啟動序列是systemv Unix(SysV)引入的初始化系統...

  • 發佈於 2021-03-31 14:20
  • 閲讀 ( 40 )

如何檢查linux核心和作業系統版本

...。然而,其他的並不普遍。例如,hostnamectl只適用於基於systemd的發行版。 不過,不管您面對的是哪種發行版,下面至少有一種方法對您有效。 l**\u釋放命令 當我們測試這個命令時,l**èu release命令已經安裝在Ubuntu和Manjaro上,但...

  • 發佈於 2021-04-01 13:11
  • 閲讀 ( 49 )

如何在ubuntulinux上管理啟動程式

...您可能還想將自己喜歡的程式新增到啟動過程中。下面是如何控制Ubuntu在登入時啟動什麼。 我們在Ubuntu20.04 LTS上用預設的GNOME桌面運行了這個過程。這些步驟在其他帶有GNOME桌面的Linux發行版上是類似的,但是您可能需要在其他...

  • 發佈於 2021-04-01 17:50
  • 閲讀 ( 48 )
fnbi1025
fnbi1025

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦