Linux

Linux啟動時啟動程序的方法有哪些?

  • November 29, 2020

我想問一下在現代 Linux(核心 3.x、4.x、5.x)中啟動應用程序的方法,它們的優缺點。

我知道3種方法:

  • cron
  • /etc/rc.local
  • 系統腳本

但是我不知道:

  • 我什麼時候應該使用哪種方法?
  • 這些方法按什麼順序執行?
  • 還有其他方法嗎?

在這種特殊情況下,我需要啟動一個腳本,該腳本執行 wvdial 並保持撥號連接。

我可以把它放進去/etc/rc.local並確保udevfind/dev/ttySomeModem存在,我的USB調製解調器驅動程序已載入嗎?或者也許我必須使用systemd和添加udev依賴項?

我用來在調製解調器連接時udev執行,並在調製解調器從大容量儲存切換到調製解調器模式時生成到調製解調器串列埠的符號連結。usb_modeswich``/dev/ttyUSB*

讓我先回答具體問題,然後我會概括一下以提示您的 wvdial 問題的解決方案。

這些方法按什麼順序執行?

Cron 每分鐘執行一次,並執行在該特定分鐘到期的命令。Cron 與啟動無關,除了它在機器關閉時顯然不執行任何東西。

/etc/rc.local 執行“最後”。使用 System V init (pre-sysemd),它實際上是在系統被認為已啟動之前執行的最後一件事。使用 systemd,它會在網路啟動後執行,但與其他服務同時執行

systemd 單元盡可能早地執行,與其依賴項並行執行(參見systemd.unit(5)Wants中的andRequires指令),並受and指令約束。systemd區分了單元的順序和它們的依賴關係Before``After

我什麼時候應該使用哪種方法?

如果您需要定期執行某些操作,請使用 Cron。使用 systemd,您還可以為此使用計時器。

rc.local 很少是正確的答案,應該避免。考慮編輯相應服務的配置,更改該服務的腳本,或編寫一個新的。請參閱此部落格文章以獲取對此的擴展解釋。

systemd 單位是您大部分時間應該使用的(但見下文)。在 System V 上,請改用服務。

還有其他方法嗎?

您已經列出了主要的,但還有一些其他任務的專用設施。例如,udev 可以在某些事件上執行腳本。KDE 或 Gnome 等桌面環境提供自動啟動功能。根據經驗,在最有意義的地方做工作;例如,使用 KDE 自動啟動來啟動您的音頻播放器,但使用 systemd 來啟動 OpenSSH 伺服器。

在這種特殊情況下,我需要啟動一個腳本,該腳本執行 wvdial 並保持撥號連接。

這是一個有趣的案例:您需要初始化一個設備,然後執行一個服務。我能想到的最簡單的方法是:

  1. 使用“systemd”標籤標記您的設備,以便systemd 為其創建一個設備單元
  2. 編寫一個依賴於設備單元的一次性單元。它應該執行usb_modeswitch並創建符號連結——與您現有的 udev 處理程序所做的相同;
  3. systemctl edit wvdial.service添加Requires=After=指令,使 wvdial 取決於您創建的一次性單元。這將延遲 wvdial 直到模式設置完成。

一個稍微笨拙的方法是保留 udev 處理程序,並將 wvdial 服務修改為忙 - 等待符號連結出現。

您可能還需要教 NetworkManager 關於 wvdial 的知識,因此 NM 知道如果設備被拔出然後重新插入,則重新撥號 - 但我不確定,因為我從未真正使用過調製解調器。

引用自:https://unix.stackexchange.com/questions/621985