需要在引導時啟動Linux程式嗎?systemd軟體提供了一種方法,可以在任何Linux發行版上使用systemd來完成這一操作,而systemd是目前大多數版本的版本,包括Ubuntu。我們將帶領您完成建立整合服務的過程,甚至與雜誌進行對話。
本教程演示如何設定啟動系統時啟動的系統服務。要在登入時啟動圖形程式,請改用桌面的啟動管理器。
有時,您在計算機上安裝的軟體會將自己連線到Linux啟動過程中,這樣程式在每次啟動計算機時都會自動啟動。您可以輕鬆地透過自己的程式和指令碼,或者實際上計算機上的任何其他程式來實現相同的行為。
啟動時啟動的程式由系統和****器systemd控制。systemd是啟動時執行的第一個程序。它始終具有程序ID(PID)1。計算機中執行的其他每個程序都由systemd啟動,或者由systemd已經啟動的程序啟動。
在後臺執行的程式稱為守護程式或服務。systemd末尾的“d”代表守護程序。在本文中,我們將建立一個示例服務。要勾選所有方框,我們的服務必須是:
我們需要一個systemd會啟動的程式。我們將建立一個簡單的指令碼,稱為“htg.sh公司”. 本教程使用Gedit文字編輯器,但是您可以使用任何您喜歡的文字編輯器。
touch htg.sh gedit htg.shgedit編輯器將開啟。將以下文字複製並貼上到編輯器中。
#!/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儲存更改並關閉編輯器。
劇本做的不多,但有幾點值得注意。
我們將指令碼複製到/usr/local/bin目錄。
sudo cp htg.sh /usr/local/bin我們需要讓它可執行:
sudo chmod +x /usr/local/bin/htg.sh由systemd啟動的每個程式都有一個定義檔案,稱為服務單元檔案。它包含某些屬性,systemd可以使用這些屬性來定位和啟動程式,並定義其某些行為。
我們需要為我們的新服務建立一個單元檔案,但是要確保現有的單元檔案中沒有一個具有我們想要為我們的新服務命名的名稱是謹慎的。
sudo systemctl list-unit-files --type-service您可以滾動瀏覽按字母順序排列的單位檔案列表,並檢查是否未使用要使用的名稱。
我們的服務將被稱為“htg服務”. 沒有單位檔案有這個名稱,所以我們可以繼續建立我們的單位檔案。
sudo gedit /etc/systemd/system/htg.servicegedit編輯器將開啟。將以下文字複製並貼上到編輯器中:
[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儲存更改並關閉編輯器。
這些條目具有以下含義。這些是典型的條目。我們的簡單服務實際上並不需要它們中的大多數,但是包含它們可以讓我們解釋它們。
單元檔案不需要可執行,但對單元檔案的許可權應該限制誰可以編輯它。您不希望惡意或惡意使用者更改單元檔案,以便它完全執行不同的程式。
此命令將授予所有者讀寫許可權,以及對組的讀許可權。其他人將沒有許可權。
sudo chmod 640 /etc/systemd/system/htg.service我們可以讓systemctl檢查單元檔案的語法,即使服務還沒有執行。將報告任何錯誤。(實際上,.service”部分對於大多數命令是可選的。)
systemctl status htg.service沒有突出顯示錯誤,這意味著我們的單元檔案語**確。
新增新單位檔案或編輯現有單位檔案時,必須通知systemd重新載入單位檔案定義。
sudo systemctl daemon-reload如果要在啟動時啟動服務,必須啟用它:
sudo systemctl enable htg啟用服務不會啟動它,它只會將它設定為在啟動時啟動。要立即啟動服務,必須將systemctl與start選項一起使用。
sudo systemctl start htg手動啟動服務或重新啟動計算機後,我們可以驗證服務是否正常執行。
sudo systemctl status htg.service將為我們顯示服務的狀態。
我們還顯示了該服務生成的最後10個日記賬分錄。不出所料,他們都相隔一分鐘。
如果需要停止服務,可以使用以下命令:
sudo systemctl stop htg.service這會停止服務,但不會阻止它在下次重新啟動計算機時重新啟動。要停止啟動時啟動的服務,您需要禁用它:
sudo systemctl disable htg.service如果服務正在執行,此命令不會停止它。它只是告訴systemd不要在下次重新啟動時啟動服務。
如果要停止服務並阻止它在啟動時啟動,請同時使用這兩個命令。
在嘗試將程式作為服務啟動之前,請確保程式按預期執行。
... 如何阻止windows 10在啟動時重新開啟上次開啟的應用程式 ...
... 然而,一旦Debian(Ubuntu軟體包的上游源)切換到systemd,Canonical決定也這樣做。Ubuntu 15.04(生動的Vervet)的釋出是第一個預設情況下使用新的啟動系統的版本。 ...
您可能會對Linux社群的危機感到驚訝。幾年前,systemd init系統的建立加重了許多開發人員和使用者的負擔。大多數基於Linux的作業系統都採用了systemd,但也有一些選擇了另一種方法。 ...
... 讓我們看看在哪裡可以找到windows10啟動資料夾,它是如何工作的,以及您應該和不應該在其中包含的程式。 ...
...讓你的電腦感覺更快,省得你點選六個圖示。你可能知道如何設定正常的桌面程式在啟動時執行,但Windows10應用商店的應用程式呢? ...
當主流Linux發行版採用systemd時,異議者會分叉分發並啟動新專案。那麼,如果您正在尋找非系統發行版,您有什麼選擇?我們來看看。 系統D:快速回顧 在歷史上,Linux系統中的啟動序列是systemv Unix(SysV)引入的初始化系統...
...。然而,其他的並不普遍。例如,hostnamectl只適用於基於systemd的發行版。 不過,不管您面對的是哪種發行版,下面至少有一種方法對您有效。 l**\u釋放命令 當我們測試這個命令時,l**èu release命令已經安裝在Ubuntu和Manjaro上,但...
...您可能還想將自己喜歡的程式新增到啟動過程中。下面是如何控制Ubuntu在登入時啟動什麼。 我們在Ubuntu20.04 LTS上用預設的GNOME桌面運行了這個過程。這些步驟在其他帶有GNOME桌面的Linux發行版上是類似的,但是您可能需要在其他...