亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文教你如何自定義systemd開機啟動腳本

 更新時間:2023年07月12日 11:02:30   作者:保溫杯里泡枸杞  
systemd開機腳本是Linux系統(tǒng)不可或缺的組成部分,它負(fù)責(zé)協(xié)調(diào)和管理系統(tǒng)啟動過程中的各項任務(wù)和服務(wù),本文將詳細(xì)為大家介紹如何自定義systemd開機啟動腳本,通過本文你將能夠深入了解Linux啟動流程,并提升系統(tǒng)的效率和可靠性

systemd簡介

systemd 是一個系統(tǒng)守護進(jìn)程(init 系統(tǒng)),用于管理 Linux 操作系統(tǒng)的啟動、運行和關(guān)閉過程。它被廣泛采用作為 Linux 發(fā)行版的默認(rèn) init 系統(tǒng),如 Ubuntu、Fedora 和 CentOS。

以下是 systemd 的一些關(guān)鍵特點和功能:

  • 啟動管理:systemd 使用并行啟動來提高系統(tǒng)啟動速度,并支持啟動任務(wù)的優(yōu)先級和依賴關(guān)系設(shè)置。它可以同時處理服務(wù)、套接字和設(shè)備文件的啟動。
  • 服務(wù)管理:systemd 通過提供單元文件(unit files)來管理系統(tǒng)服務(wù)。每個服務(wù)都有對應(yīng)的配置文件,您可以在其中定義服務(wù)的屬性、行為和依賴關(guān)系。同時,systemd 還提供了強大的日志記錄、故障排除和錯誤報告機制。
  • 日志管理:systemd-journald 是 systemd 內(nèi)置的日志管理器,負(fù)責(zé)收集、存儲和檢索系統(tǒng)日志信息。它支持結(jié)構(gòu)化日志、日志轉(zhuǎn)發(fā)和高性能查詢功能。
  • 設(shè)備管理:systemd 可以監(jiān)控和管理系統(tǒng)中的設(shè)備,包括磁盤驅(qū)動器、網(wǎng)絡(luò)接口和輸入設(shè)備等。它提供了 udev 規(guī)則來自動處理設(shè)備事件,例如插入或移除設(shè)備時觸發(fā)相應(yīng)操作。
  • 用戶會話管理:systemd 提供了用戶會話管理功能,它可以啟動和監(jiān)控用戶會話,以及處理用戶登錄和注銷過程。這對于支持多用戶環(huán)境并提供長時間運行的會話非常有用。
  • 定時任務(wù)管理:systemd-timers 模塊允許您定義和管理定時任務(wù)(類似于 crontab),可以精確地調(diào)度任務(wù)運行,并提供靈活的配置選項。

總體而言,systemd 提供了一個集成的、強大而靈活的系統(tǒng)管理框架,它改善了 Linux 系統(tǒng)的啟動速度、進(jìn)程管理、日志記錄和設(shè)備管理等方面的性能和功能。因其廣泛采用和豐富的功能,熟悉 systemd 對于 Linux 系統(tǒng)管理員和開發(fā)人員來說是非常重要的。

腳本存放位置

  • /etc/systemd/system系統(tǒng)管理員安裝的單元, 優(yōu)先級更高
  • /usr/lib/systemd/system:該目錄中包含的是軟件包安裝的單元,也就是說通過 yum、dnf、rpm 等軟件包管理命令管理的 systemd 單元文件,都放置在該目錄下

    目錄/lib/systemd/system 以及/usr/lib/systemd/system 其實指向的是同一目錄

腳本簡介

/usr/lib/systemd/system下創(chuàng)建文件nginx.service,并賦予權(quán)限chmod +x nginx.service

[Unit]
?
Description=nginx service
# 要求必須執(zhí)行網(wǎng)絡(luò)
Requires=network-online.target
# 在網(wǎng)絡(luò)啟動之后啟動
After=network.target
[Service]
# 工作目錄
WorkingDirectory=/yourpath/infra/nginx
Type=forking
User=root
# systemctl start nginx
ExecStart=/yourpath/infra/nginx/sbin/nginx -c /yourpath/infra/nginx/conf/nginx.conf
# systemctl start reload
ExecReload=/yourpath/infra/nginx/sbin/nginx -s reload
?
[Install]
WantedBy=multi-user.target
?
  • [Unit] 部分,您可以提供對服務(wù)的描述和定義其依賴關(guān)系。After=network.target 表示該服務(wù)將在網(wǎng)絡(luò)啟動后啟動。
  • [Service] 部分,指定要執(zhí)行的腳本路徑。請將 /path/to/your/script.sh 替換為您實際的腳本路徑。
  • [Install] 部分用于指定啟動級別。WantedBy=default.target 表示該服務(wù)將隨系統(tǒng)默認(rèn)目標(biāo)一起啟動。

在 Systemd 中,Type 是一個服務(wù)單元文件中的參數(shù),它是用來指定服務(wù)類型的。一個服務(wù)可能有以下幾種類型:

  • simple:服務(wù)主進(jìn)程不會以守護進(jìn)程方式運行,即服務(wù)進(jìn)程在啟動后會一直運行,并占據(jù)終端。當(dāng)服務(wù)進(jìn)程退出時,Systemd 認(rèn)為服務(wù)已經(jīng)停止運行。
  • forking:服務(wù)主進(jìn)程以守護進(jìn)程方式運行。在啟動服務(wù)后,服務(wù)主進(jìn)程會將控制權(quán)交給子進(jìn)程來執(zhí)行實際的任務(wù)。此時,服務(wù)主進(jìn)程會退出,但服務(wù)并沒有結(jié)束。當(dāng)子進(jìn)程退出時,Systemd 認(rèn)為服務(wù)已經(jīng)停止運行。
  • oneshot:服務(wù)主進(jìn)程會被執(zhí)行一次,然后退出。當(dāng)服務(wù)主進(jìn)程退出時,Systemd 認(rèn)為服務(wù)已經(jīng)停止運行。
  • dbus:該類型的服務(wù)主要是以消息總線的方式提供服務(wù),通常是由 D-Bus 庫和 Systemd 搭配使用。
  • notify:該類型的服務(wù)主要是通過向 Systemd 發(fā)送通知來表示服務(wù)已經(jīng)啟動完畢,例如在 MySQL 服務(wù)中,主進(jìn)程在成功啟動之后會向 Systemd 發(fā)送一個 READY=1 的通知。

不同的服務(wù)類型會對應(yīng)不同的邏輯,具體使用哪種類型取決于服務(wù)運行的特點和需求。

執(zhí)行腳本命令

# 重新加載systemd
systemdctl daemon-reload
?
# 將 nginx.service 加入到開機啟動
systemctl enable nginx.service
?
# 卸載 nginx.service
systemctl disable nginx.service
?
# 手動啟動
systemctl start nginx.service

查看日志

/var/log/messages:存放的是系統(tǒng)的日志信息,它記錄了各種事件,基本上什么應(yīng)用都能往里寫日志,在做故障診斷時可以首先查看該文件內(nèi)容

方式一:

journalctl -u nginx.service

方式二:

tail -f messages

至此,如果使用命令能夠啟動成功,一般開機也會自啟動,無需手動執(zhí)行

實戰(zhàn)

開機啟動Elasticsearch

elasticsearch.service

/usr/lib/systemd/system下創(chuàng)建文件elasticsearch.service,并賦予權(quán)限chmod +x elasticsearch.service

[Unit]
?
Description=elasticsearch service
# 要求必須執(zhí)行網(wǎng)絡(luò)
#Requires=network-online.target
# 在網(wǎng)絡(luò)啟動之后啟動
After=network.target
[Service]
WorkingDirectory=/yourpath/infra/elasticsearch-7.17.4
?
LimitNOFILE=100000
LimitNPROC=100000
?
Type=forking
?
# 由于es不可以使用root啟動,這里使用test用戶
User=test
# 啟動腳本
ExecStart=/bin/sh /yourpath/infra/elasticsearch-7.17.4/start.sh
?
#Restart=on-failure
?
[Install]
WantedBy=multi-user.target
?

重點解釋,LimitNOFILELimitNPROC

LimitNOFILE:

LimitNOFILE用于設(shè)置進(jìn)程的文件描述符限制的參數(shù)

文件描述符是操作系統(tǒng)為進(jìn)程分配的用于訪問文件和其他輸入/輸出資源的標(biāo)識符。每個進(jìn)程都有一個限制,決定了它可以同時打開的文件數(shù)量。

LimitNOFILE參數(shù)用于設(shè)置進(jìn)程可以打開的文件描述符的最大數(shù)量。通過限制文件描述符的數(shù)量,可以控制進(jìn)程對系統(tǒng)資源(如文件、套接字等)的使用情況。

在啟動腳本中設(shè)置LimitNOFILE的值可以影響到該進(jìn)程及其子進(jìn)程的文件描述符限制。例如,如果將LimitNOFILE設(shè)置為1000,則該進(jìn)程及其子進(jìn)程最多只能同時打開1000個文件

LimitNPROC:

每個進(jìn)程在操作系統(tǒng)中都有一個相關(guān)的進(jìn)程數(shù),表示該進(jìn)程所創(chuàng)建或派生的子進(jìn)程數(shù)量。操作系統(tǒng)為每個用戶和系統(tǒng)范圍內(nèi)的進(jìn)程數(shù)都有一個上限限制。

通過使用LimitNPROC參數(shù),可以限制進(jìn)程及其子進(jìn)程可以同時存在的最大數(shù)量。一旦達(dá)到該限制,進(jìn)程將無法創(chuàng)建更多的子進(jìn)程。這有助于控制系統(tǒng)資源(如內(nèi)存、處理器等)的使用情況,防止某個進(jìn)程或用戶占用過多的系統(tǒng)資源。

在啟動腳本中設(shè)置LimitNPROC的值可以影響到該進(jìn)程及其子進(jìn)程的并發(fā)進(jìn)程數(shù)限制。例如,如果將LimitNPROC設(shè)置為100,則該進(jìn)程及其子進(jìn)程最多只能同時存在100個進(jìn)程

可以嘗試不設(shè)置這兩個參數(shù),看看會發(fā)生什么問題

啟動Elasticsearch腳本

#!/bin/sh
su test
/yourpath/infra/elasticsearch-7.17.4/bin/elasticsearch -d

相關(guān)命令

systemctl enable elasticsearch.service
systemctl disable elasticsearch.service
systemctl start elasticsearch.service
ps -ef | grep elasticsearch

開機啟動springboot項目

springboot.service

/usr/lib/systemd/system下創(chuàng)建文件springboot.service,并賦予權(quán)限chmod +x springboot.service

[Unit]
?
Description=springboot service
# 要求必須執(zhí)行網(wǎng)絡(luò)
#Requires=network-online.target
# 在網(wǎng)絡(luò)啟動之后啟動
After=network.target
[Service]
WorkingDirectory=/yourpath/app/springboot
?
Type=forking
User=root
# 啟動前,等待10s
ExecStartPre=/bin/sleep 10
ExecStart=/bin/sh /yourpath/app/springboot/start.sh
?
# 不輸出日志
StandardOutput=null
StandardError=null
?
[Install]
WantedBy=multi-user.target
?

解釋:

  • ExecStartPre:當(dāng)啟動springboot.service時,會先等待10s再啟動,例如,項目依賴了mysql,而mysql啟動需要時間。
  • StandardOutput,StandardError:配置了這兩個為null,意思是springboot項目自身的日志,就不打印再/var/log/message中,因為springboot項目自身有日志管理

啟動springboot腳本

#!/bin/sh
/bin/nohup /youpath/infra/jdk1.8.0_341/bin/java -jar /lbpdata/app/springboot/bootstrap-1.0.0.jar --server.servlet.context-path=/test --spring.config.location=application-test.yml >/dev/null 2>&1 &

我們在寫腳本之時,最好都要寫,完整的指令路徑,不然經(jīng)常會報找不到指令

相關(guān)命令

systemctl enable springboot.service
systemctl disable springboot.service
systemctl start springboot.service
jps -l

以上就是一文教你如何自定義systemd開機啟動腳本的詳細(xì)內(nèi)容,更多關(guān)于自定義systemd開機腳本的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Apache Doris的Bitmap索引和BloomFilter索引使用及注意事項

    Apache Doris的Bitmap索引和BloomFilter索引使用及注意事項

    bitmap index是一種位圖索引,是一種快速數(shù)據(jù)結(jié)構(gòu),能夠加快查詢速度,BloomFilter索引也是以Block為粒度創(chuàng)建的,這篇文章主要介紹了Apache Doris的Bitmap索引和BloomFilter索引使用,需要的朋友可以參考下
    2022-09-09
  • apache負(fù)載均衡的安裝和實現(xiàn)方法

    apache負(fù)載均衡的安裝和實現(xiàn)方法

    在負(fù)載均衡技術(shù)中,硬件設(shè)備是比較昂貴的,對于負(fù)載均衡的學(xué)習(xí)者如果不是在企業(yè)中應(yīng)用或者是學(xué)員中學(xué)習(xí),很少有機會能碰到實際操作的訓(xùn)練。所以,很多朋友都會選擇軟件方面的設(shè)置進(jìn)行研究?,F(xiàn)在我們就來介紹一下再Apache下的Tomcat負(fù)載均衡的一些使用問題
    2012-10-10
  • Apache下MP3 防盜鏈的解決辦法

    Apache下MP3 防盜鏈的解決辦法

    對于很多放MP3的網(wǎng)站來說,防盜鏈對于控制流量是個非常重要的事情,尤其是MP3被百度收錄之后,那流量大的驚人,每天都上百G的流量,很快你的站點的流量就會用光了。
    2010-08-08
  • Linux設(shè)置文件和目錄權(quán)限方式

    Linux設(shè)置文件和目錄權(quán)限方式

    在Linux系統(tǒng)中,文件和目錄的權(quán)限分為訪問權(quán)限和歸屬權(quán)限,訪問權(quán)限包括讀(r)、寫(w)、執(zhí)行(x),可用字符或數(shù)字方式設(shè)置,歸屬權(quán)限涉及文件的所有者和用戶組,特殊權(quán)限包括suid、sgid和Sticky位,分別用于提高程序的安全性和管理共享目錄
    2024-11-11
  • linux兩臺服務(wù)器實現(xiàn)自動同步文件

    linux兩臺服務(wù)器實現(xiàn)自動同步文件

    這篇文章主要介紹了linux兩臺服務(wù)器實現(xiàn)自動同步文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • ubuntu18.04獲取root權(quán)限并用root用戶登錄的實現(xiàn)

    ubuntu18.04獲取root權(quán)限并用root用戶登錄的實現(xiàn)

    這篇文章主要介紹了ubuntu18.04獲取root權(quán)限并用root用戶登錄的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • linux上搭建私有Git服務(wù)器的詳細(xì)教程

    linux上搭建私有Git服務(wù)器的詳細(xì)教程

    這篇文章主要介紹了linux上搭建私有Git服務(wù)器的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • LNMP自動安裝部署腳本

    LNMP自動安裝部署腳本

    LNMP是一個基于CentOS/Debian編寫的Nginx、PHP、MySQL、phpMyAdmin、eAccelerator一鍵安裝包,這篇文章主要為大家分享了LNMP自動安裝部署腳本
    2016-10-10
  • 詳解如何在Ubuntu上檢查、開啟、關(guān)閉端口

    詳解如何在Ubuntu上檢查、開啟、關(guān)閉端口

    在深入探討如何在Ubuntu上檢查、開啟、關(guān)閉端口之前,理解網(wǎng)絡(luò)基礎(chǔ)概念、端口的工作原理以及Ubuntu的網(wǎng)絡(luò)架構(gòu)是至關(guān)重要的,文中通過代碼示例介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-06-06
  • Apache Airflow使用步驟

    Apache Airflow使用步驟

    ApacheAirflow是一款開源的任務(wù)編排和調(diào)度平臺,主要用于創(chuàng)建、調(diào)度和監(jiān)控數(shù)據(jù)工作流,本文給大家介紹Apache Airflow使用步驟,感興趣的朋友一起看看吧
    2024-09-09

最新評論