Linux

在所有基於 *nix 的系統中啟動時執行 jar

  • May 29, 2014

我有一個 jar 文件,我需要在所有 Linux 發行版中啟動時執行它。我之前的問題在這裡,給了我一個關於 X 伺服器的粗略想法。由於我無法執行啟動,我轉而考慮將 .desktop 文件添加到/etc/xdg/autostart. 這適用於 ubuntu,我目前正在 Linux Mint 中測試它的肉桂和伴侶版本。我對其他發行版進行了一項小型研究,但他們似乎沒有,/etc/xdg/autostart/xdg-autostart我需要在所有 Linux 發行版中執行我的 jar 文件。我嘗試了 crontab,但@reboot沒有在 ubuntu 14.04 中為我工作。另一個問題是我需要在解除安裝 jar 時刪除要啟動的文件。如果我編輯 rc.local,我將無法恢復編輯。有沒有一種常見的方法可以在 Linux 中啟動

沒有在所有 GNU/Linux 發行版上創建系統服務的通用方法,因為它們使用各種 init 系統。曾幾何時,他們都使用或多或少相同的SysV 風格的 init(除了一些使用更多 BSD 風格的系統),這允許編寫通用的 init 腳本,從發行版到發行版幾乎不需要修改。

目前,許多發行版仍在使用 SysV,例如 Debian 和 RHEL / CentOS。但是,較新的初始化系統——systemd(Fedora、Arch 等)和upstart (Ubuntu) 1確實包含向後支持 SysV 樣式初始化腳本的機制,所以如果您正在尋找最容易採用的方法在大多數係統上,仍然如此。

請記住,在“Windows 8”或“OSX”是作業系統的意義上,“linux”不是作業系統。 Linux是用於多種平台(例如,Android)的作業系統核心;通俗地說,“GNU/Linux”是指上面討論的作業系統發行版的集合,但它們並不完全相同。沒有認真的意圖或願望來統一這些,就像沒有認真的意圖或願望來統一 Windows 和 OSX 那樣,例如,有人可能會問“我如何在 OSX 和 Windows 上啟動時執行我的 jar 文件? " – 你不走運,你需要為每個人單獨打包。也就是,其實linux世界裡的軟體一般是怎麼分佈的;

1但是Ubuntu(和 Debian)正在轉向 systemd,這意味著新貴可能會消失,並且大多數主要發行版都將擁有一個通用的 init 系統。

遺憾的是,我不相信有一個單一的、通用的方法可以完全實現你想要的。每個 nix 都有一個 init 系統,並且有各種不同的 init 系統(SysV、Upstart、systemd 等)。現在,systemd 對執行 SysV 守護程序有一些支持,因此您可能能夠擺脫編寫 SysV 腳本並使其適用於兩者,但我不知道這將如何與 Upstart 和其他系統一起執行。我可以看到兩種可能會幫助您實現目標的行動方案:

  1. 為每個主要的 init 系統編寫一個服務(請注意,許多發行版正在切換到 systemd,因此它可能是一個不錯的開始)。
  2. 放棄在啟動時執行它,稍後再嘗試執行它。

例如,儘管 init 系統仍然非常分散,但 shell 登錄幾乎是通用的。$HOME/.shellrc如果尚未執行,您可以在每個執行 jar 的地方添加幾行。這樣做的工作量會少得多,而且更普遍適用。

明顯的優點1是它會在使用者看到任何東西之前執行 jar。但是,可以2通過設置自動登錄來緩解這種情況(儘管對於安全性來說不是一個好主意)。

請注意,如果這是一個 GUI jar,那麼您將有很多額外的麻煩(使 X 或 Wayland 啟動以便您的 jar 可以執行將至少添加幾行到您決定的任何解決方案)。

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