在Linux上將 `.sh` 腳本、`.jar` 包或其他腳本文件添加到開機自啟動

在Linux上將 .sh 腳本、.jar 包或其他腳本文件添加到開機自啟動

在Linux環境中,有時需要將一些程序、腳本或應用程序設置為開機時自動啟動。這對于那些需要在系統啟動時啟動的服務或應用非常有用。本文將介紹如何將 .sh 腳本、.jar 包或其他腳本文件添加到Linux系統的開機自啟動中。

1. 使用 systemd 設置開機自啟動

systemd 是大多數現代Linux發行版(如Ubuntu 16.04+、CentOS 7+等)的初始化系統。通過 systemd,可以將腳本、程序或服務添加到開機自啟動中。

步驟 1:創建一個自定義的服務文件
  1. 打開終端,創建一個新的 systemd 服務文件。通常,這些服務文件存放在 /etc/systemd/system/ 目錄下。

    sudo nano /etc/systemd/system/my-script.service
    
  2. 在服務文件中,寫入如下內容:

    [Unit]
    Description=My Custom Script Service
    After=network.target[Service]
    ExecStart=/bin/bash /path/to/your/script.sh
    WorkingDirectory=/path/to/your/directory
    User=your-username
    Group=your-group
    Restart=always
    StandardOutput=journal
    StandardError=inherit[Install]
    WantedBy=multi-user.target
    

    解釋:

    • [Unit] 部分定義服務的描述和依賴關系(如 After=network.target 表示在網絡服務啟動后再啟動此腳本)。
    • [Service] 部分指定要執行的命令,ExecStart 用來指定腳本的路徑。
    • WorkingDirectory 指定腳本執行的工作目錄。
    • UserGroup 用來指定運行腳本的用戶和用戶組(選填)。
    • Restart=always 表示如果腳本退出,將會自動重啟腳本。
    • [Install] 部分定義服務在哪個目標下運行,multi-user.target 表示多用戶環境下啟動。

systemd 服務文件中,TypeRestartRestartSecLimitNOFILEPrivateTmp 是常用的參數配置選項。每個選項都有特定的用途和行為。下面是這些參數的詳細解釋和可選項:

  1. Type
    Type 用于定義服務的啟動類型,指定 systemd 如何識別和管理服務進程。常見的選項有:
  • simple
    默認類型。systemd 假設服務是一個簡單的前臺進程,啟動后會一直運行,直到退出。適用于大多數服務。

  • forking
    如果服務是一個父進程(通常是守護進程),并在啟動時會分叉(即父進程退出,而子進程繼續運行),則應使用 forking。在這種模式下,systemd 會等待服務的父進程退出并認為它已啟動完畢,實際上是監視子進程。

  • oneshot
    適用于一次性任務,在啟動時運行并且立即完成。systemd 不會持續監控此服務的狀態。

  • notify
    如果服務使用 sd_notify()systemd 發送通知以指示其已啟動或完成,使用 notify 類型。服務需要主動通知 systemd 啟動狀態。

  • idle
    服務在 systemd 的空閑時間啟動,適用于延遲啟動任務。

  1. Restart
    Restart 用于指定服務崩潰后的重啟策略。常用的選項包括:
  • no
    不會在服務崩潰后自動重啟,這是默認設置。

  • always
    無論服務是正常退出還是異常退出,都會嘗試重新啟動服務。

  • on-failure
    只有在服務非正常退出時(即退出碼非零)才會重啟。適用于希望在服務崩潰時自動重啟,但正常退出時不重啟的情況。

  • on-abort
    只有在服務因信號退出(通常是 SIGABRT 或其他致命信號)時才會重啟。

  • unless-stopped
    服務會在失敗時重啟,除非用戶手動停止服務。

  1. RestartSec
    RestartSec 用來配置在嘗試重啟服務之前等待的時間(秒)。這對于防止服務崩潰后立即重啟非常有用,尤其是在服務可能需要一段時間來恢復或解決問題時。
  • 示例:設置重啟間隔為10秒。
    RestartSec=10
    
  1. LimitNOFILE
    LimitNOFILE 設置服務進程可以打開的最大文件描述符數量。Linux 系統中,進程能夠打開的文件、套接字等資源數量是有限制的,適當增加此限制可以提高某些服務(如數據庫服務、Web 服務器等)的性能,尤其是在高并發場景下。
  • 示例:設置允許打開的最大文件描述符為 65535。
    LimitNOFILE=65535
    
  1. PrivateTmp
    PrivateTmp 用來控制服務是否使用獨立的臨時目錄。啟用此選項時,服務會使用獨立于系統默認臨時目錄(如 /tmp/var/tmp)的臨時空間,這樣可以提高服務的安全性,防止其他進程訪問其臨時文件。
  • true
    啟用獨立的臨時目錄。

    PrivateTmp=true
    
  • false
    禁用獨立的臨時目錄,服務使用系統默認的臨時目錄。

    PrivateTmp=false
    
步驟 2:重新加載 systemd 配置并啟用服務
  1. 保存文件后,重新加載 systemd 配置并啟用服務:

    sudo systemctl daemon-reload
    sudo systemctl enable my-script.service
    
  2. 啟動服務:

    sudo systemctl start my-script.service
    
  3. 檢查服務的狀態:

    sudo systemctl status my-script.service
    

此時,腳本將在每次系統啟動時自動執行。

2. 使用 crontab 設置開機自啟動

除了 systemdcron 是另一種常用的定時任務調度工具。你可以使用 cron 來設置系統開機時執行某個任務。

步驟 1:編輯 crontab 文件
  1. 使用 crontab 編輯器打開 cron 配置文件:

    crontab -e
    
  2. 在文件末尾添加如下行,以便在系統啟動時執行腳本:

    @reboot /path/to/your/script.sh
    
  3. 如果你需要在腳本中啟動 .jar 文件,可以使用類似的命令:

    @reboot java -jar /path/to/your/application.jar
    
  4. 保存并退出編輯器。

步驟 2:驗證 cron 服務是否運行

確保 cron 服務正在運行,以便系統啟動時可以執行任務:

sudo systemctl status cron

如果服務未啟動,可以使用以下命令啟動它:

sudo systemctl start cron

3. 使用 /etc/rc.local 文件設置開機自啟動

在一些較老的Linux發行版中,可以通過編輯 /etc/rc.local 文件來設置開機自啟動任務。

步驟 1:編輯 rc.local 文件
  1. 打開 /etc/rc.local 文件:

    sudo nano /etc/rc.local
    
  2. 在文件的 exit 0 行之前添加你希望開機啟動的命令:

    /path/to/your/script.sh &
    
  3. 確保腳本命令末尾有一個 & 符號,這樣腳本將在后臺運行。

  4. 保存并退出編輯器。

步驟 2:賦予執行權限

確保 rc.local 文件具有執行權限:

sudo chmod +x /etc/rc.local

4. 使用 init.d 腳本設置開機自啟動

init.d 腳本是傳統的Linux開機啟動方式,但在現代系統中,systemd 已經取代了它。不過,如果你使用的是較舊的Linux版本,依然可以使用 init.d 腳本來設置開機啟動。

步驟 1:創建 init.d 腳本
  1. /etc/init.d/ 目錄下創建腳本文件:

    sudo nano /etc/init.d/myscript
    
  2. 編寫腳本內容:

    #!/bin/bash
    # Description: My custom script
    # Start the script
    /path/to/your/script.sh
    
  3. 賦予腳本執行權限:

    sudo chmod +x /etc/init.d/myscript
    
步驟 2:啟用服務

將腳本添加到開機啟動項:

sudo update-rc.d myscript defaults

總結

在Linux中,可以通過多種方法設置腳本、.jar 文件或其他程序在系統啟動時自動運行。使用 systemd 是目前推薦的方式,因為它提供了更多的靈活性和控制。如果系統不支持 systemd,則可以選擇使用 cron 或傳統的 rc.localinit.d 腳本。

無論選擇哪種方法,都應確保腳本或程序路徑正確,權限設置得當,并且服務能夠正確啟動。

希望本文幫助你理解如何在Linux上設置腳本或程序的開機自啟動!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63480.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63480.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63480.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git使用步驟

Git 是一個分布式版本控制系統,廣泛用于軟件開發和其他需要跟蹤文件變更的項目。以下是 Git 的基本使用方法和一些常用命令的詳細說明。 安裝 Git 在大多數操作系統上,你可以通過包管理器安裝 Git: Windows: 下載并安裝 Git for Windows。…

詳細指南:在Ubuntu 20.04上安裝和配置Orbbec SDK及USB設備權限

詳細指南:在Ubuntu 20.04上安裝和配置Orbbec SDK及USB設備權限 在Ubuntu 20.04上安裝和配置Orbbec SDK以及進行USB設備的權限配置和調整USBFS緩存大小,涉及到一系列系統配置和環境準備步驟。以下是詳細的步驟說明,以確保準確和高效地設置開發…

【GCC】2015: draft-alvestrand-rmcat-congestion-03 機器翻譯

騰訊云的一個分析,明顯是看了這個論文和草案的 : 最新的是應該是這個 A Google Congestion Control Algorithm for Real-Time Communication draft-ietf-rmcat-gcc-02 下面的這個應該過期了: draft-alvestrand-rmcat-congestion-03

計算機網絡技術基礎:5.數據通信系統

一、數據通信的基本概念 1.信息 信息是對客觀事物的運動狀態和存在形式的反映,可以是客觀事實的形態、大小、結構、性能等描述,也可以是客觀事物與外部之間的聯系。信息的載體可以是數字、文字、語音、圖形和圖像等。計算機及其外圍設備產生和交換的信息…

STM32中ADC模數轉換器

一、ADC簡介 ADC模擬-數字轉換器 ADC可以將引腳連續變化的模擬電壓轉換為內存中存儲的數字變量,建立模擬電路到數字電路的橋梁 12位逐次逼近型ADC,1us轉換時間 輸入電壓范圍: 0~3.3V,轉換結果范圍:0~4095 18個輸入…

醫療領域的網絡安全預防:保障患者隱私與醫療數據安全

醫療領域的網絡安全預防:保障患者隱私與醫療數據安全 隨著信息技術的不斷發展和醫療行業的數字化轉型,網絡安全在醫療領域變得愈加重要。醫療行業處理著大量的敏感數據,包括患者的個人信息、醫療記錄、診療方案等,這些數據一旦被…

【數字圖像處理】期末綜合知識點總結 ver1,灰度圖像,圖像增強,平滑濾波,銳化濾波,圖像復原,圖像壓縮

關注作者了解更多 我的其他CSDN專欄 過程控制系統 工程測試技術 虛擬儀器技術 可編程控制器 工業現場總線 數字圖像處理 智能控制 傳感器技術 嵌入式系統 復變函數與積分變換 單片機原理 線性代數 大學物理 熱工與工程流體力學 數字信號處理 光電融合集成電路…

.NET 技術 | 調用系統API創建Windows服務

01閱讀須知 此文所提供的信息只為網絡安全人員對自己所負責的網站、服務器等(包括但不限于)進行檢測或維護參考,未經授權請勿利用文章中的技術資料對任何計算機系統進行入侵操作。利用此文所提供的信息而造成的直接或間接后果和損失&#xf…

【Qt】QWidget中的常見屬性及其功能(二)

目錄 六、windowOpacity 例子: 七、cursor 例子: 八、font 九、toolTip 例子: 十、focusPolicy 例子: 十一、styleSheet 計算機中的顏色表示 例子: 六、windowOpacity opacity是不透明度的意思。 用于設…

Elasticsearch02-安裝7.x

零、文章目錄 Elasticsearch02-安裝7.x 1、Windows安裝Elasticsearch (1)JDK安裝 Elasticsearch是基于java開發的,所以需要安裝JDK。我們安裝的Elasticsearch版本是7.15,對應JDK至少1.8版本以上。也可以不安裝jdk,…

php學習資料分享

php學習資料分享:夸克網盤分享

UWA Gears V1.0.5|新增Thread Load指標

UWA Gears 是UWA最新發布的無SDK性能分析工具。針對移動平臺,提供了實時監測和截幀分析功能,幫助您精準定位性能熱點,提升應用的整體表現。 本次版本更新主要是新增了Thread Load指標,幫助大家更直觀地了解多線程任務的負載分布情…

IAR中如何而將定義的數組放在指定的位置

在keil中可以使用下面的方法將數組定義到指定的位置 uint8_t g_usart_rx_buf[USART_REC_LEN] __attribute__ ((at(0X20001000)));但是這個方法在IAR中是用不了的,通過網上查找各種資料,發現了兩種可用的方法。我這里測試的單片機是stm32f103c8t6,其他單…

共創共建!葡萄城 SpreadJS 完成 HarmonyOS NEXT 操作系統兼容認證

最新技術資源(建議收藏) https://www.grapecity.com.cn/resources/ 近日,華為“企業工作必備應用鴻蒙化論壇”在北京圓滿落幕,論壇匯聚了眾多行業精英和合作伙伴,聚焦討論企業數字化轉型與原生鴻蒙生態融合等話題。葡萄…

hpe服務器更新陣列卡firmware

背景 操作系統:RHEL7.8 hpe服務器經常出現硬盤斷開,陣列卡重啟問題,導致系統hang住。只能手動硬重啟。 I/O error,dev sda smartpqi 0000:5c:00:0: resettiong scsi 1:1:0:1 smartpqi 0000:5c:00:0: reset of scsi 1:1:0:1:…

websocket的心跳檢測和斷線重連

心跳檢測和斷線重連可以通過WebSocket的事件和屬性來實現。以下是一個簡單的JavaScript示例,使用WebSocket API實現心跳檢測和斷線重連的功能: let ws;function connectWebSocket() {ws new WebSocket(ws://your-websocket-server-url);ws.onopen fun…

ES6學習Symbol(五)

這里寫目錄標題 一、概述二、代碼 一、概述 ES6引入了一種新的原始數據類型Symbol,表示獨一無二的值。 它是 JavaScript 語言的第七種數據類型,前六種是: undefined 、 null 、布爾值(Boolean)、字符串(St…

Spark-Streaming容錯語義

一、背景 為了理解Spark Streaming提供的語義,我們先回顧西Spark RDD的基本容錯語義學。 RDD是一個不可變的、確定性可重新計算的分布式數據集。每個RDD都記住在容錯輸入數據集上用于創建它的確定性操作的沿襲。如果RDD的任何分區由于工作節點故障而丟失&#xff…

AmpliconSuite-pipeline

AmpliconSuite-pipeline: 多線程支持的端到端工具,用于從配對端全基因組測序數據分析局部拷貝數擴增(如ecDNA或BFB) AmpliconSuite-pipeline 是一個多線程支持的端到端工具,用于 AmpliconArchitect 和 AmpliconClassifier,以支持從配對端全基因組測序數據分析局部拷貝數擴…

QNX通過pfctl工具查看socket通信狀態

通過pfctl -si && pfctl -ss可以查看當前主機IP和外域IP之間的所有socket通信狀態,顯示的格式是 傳輸層協議 | 主機IP | 外域IP | 主機端狀態:外域狀態 ------------------------------------------------------------------------…