Debian

如何在debian中添加腳本來啟動和關閉?

  • April 21, 2021

標題幾乎總結了它。

如何將我的伺服器應用程序的 startup.sh 和 shutdown.sh 添加到 Debian 作業系統的啟動和關閉序列中?

在 Debian 上,服務和應用程序啟動和關閉腳本應該放在/etc/init.d/.

Debian 提供了一個範例腳本/etc/init.d/skeleton,您可以根據您的特定應用程序的喜好對其進行修改。

一旦到位,請致電:

# update-rc.d YOURAPP defaults

要讓 Debian/etc/rc?.d/為您添加符號連結。

如果您更喜歡菜單或圖形界面,請查看sysv-rc-conforksysv包。

自 Debian Jessie 以來,舊init程序已被**systemd**.

自己檢查一下。執行:ls -l /sbin/init看看它指向什麼。現在它指向systemd( /sbin/init -> /lib/systemd/systemd),一個更新更好的初始化程序。


所以這裡的選擇和其他答案現在已經過時了


*雖然您仍然可以使用 System-V 工具以舊方式安裝腳本,但一般來說這不是一個好主意。

man systemd.service說:*

如果以特定名稱請求服務但未找到單元配置文件,systemd 會查找具有相同名稱的 SysV 初始化腳本……並從該腳本動態創建服務單元。這對於與 SysV 的兼容性很有用。請注意,這種兼容性非常全面,但不是 100%。


對於較新的 Debian 系統(即 Jessie、Stretch、Buster 等…)

這比你想像的要容易。(-:

這是安裝啟動或關閉程序的新的首選方法。

systemd你首先要創建一個單元文件。單元文件主要是聲明,而不是程式碼。

然後,您將使用該**systemctl命令啟用啟動**該單元。

systemd為您完成大部分工作,例如,讓關鍵程序在崩潰或被終止時自動重新啟動變得容易。此外,它還會在預設情況下在何時何地關閉您的程序,而無需您做任何額外的工作。


從這裡開始了解systemd

來自Debian和 其他地方等等等等


手冊頁開始:

man systemd.unit – 關於一般的單元文件

man systemd.service – 關於服務單元文件,例如守護程序和單次執行程序。

man systemctl – 命令行使用者界面

man journalctl– 查看 systemd 所做的日誌

man systemd – 關於init程序本身


還有多種其他類型的單元文件,例如

man systemd.target- 用於組和常見的同步目標。

一旦你消化了上面的基礎知識,然後深入研究man -k systemd以找到其他相關的手冊頁。



無論你做什麼,在 Debian 上都不要使用這些

  • update-rc.d–安裝和刪除 System-V 風格的初始化腳本連結
  • sysv-rc-conf– SysV 的執行級配置,如初始化腳本連結
  • runlevel– 列印以前和目前的 SysV 執行級別
  • BUMBoot U p Manager - 一個圖形化的執行級別編輯
  • systemadm– systemd 系統和服務管理器的圖形前端

(順便說一句,作者通過電子郵件告訴我它現在太壞了。)



一個例子:

這個單元文件在我啟動時啟動 NoIP.com 守護程序,並在我關閉時將其關閉。

這個守護程序會不時發送我目前的 IP 地址來更新我的 DDNS(**動態***DNS** 域名伺服器)**)*提供商的數據庫,從而使我的域名始終指向我的電腦,無論它去往何處。

此單元文件位於我係統上的此設置文件中:/etc/systemd/system/noip2.service

這是單元文件中的內容:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

手動執行一個單元文件,(例如用於測試):

  • 開始$ sudo systemctl start noip2。_
  • $ sudo systemctl restart noip2重新啟動
  • 停止$ sudo systemctl stop noip2。_

配置系統在啟動或關閉時自動執行一個單元文件:

  • 開始使用$ sudo systemctl enable noip2
  • 結束使用with $ sudo systemctl disable noip2

查看日誌

  • $ sudo journalctl -u noip2

引用自:https://serverfault.com/questions/10811