長(zhǎng)春火車站咨詢電話企業(yè)如何做好網(wǎng)絡(luò)營(yíng)銷
博文目錄
文章目錄
- Systemd
- 操作方式
- 配置方式
- 配置示例
- 參考
Systemd
Systemd 是一個(gè)用于啟動(dòng)、管理和監(jiān)控 Linux 系統(tǒng)的初始化系統(tǒng)。它是許多現(xiàn)代 Linux 發(fā)行版中默認(rèn)的初始化系統(tǒng),取代了傳統(tǒng)的 SysVinit 和 Upstart。
Systemd 的引入在 Linux 社區(qū)引起了一些爭(zhēng)議,因?yàn)樗c傳統(tǒng)的初始化系統(tǒng)有很大的差異。然而,它的設(shè)計(jì)目標(biāo)和功能使得管理和維護(hù) Linux 系統(tǒng)變得更加高效和便捷。它已經(jīng)成為許多主流 Linux 發(fā)行版的標(biāo)準(zhǔn)選擇,并得到了廣泛的應(yīng)用和支持。
Systemd 的設(shè)計(jì)目標(biāo)是提供更快的啟動(dòng)速度、更好的資源管理和更強(qiáng)大的系統(tǒng)監(jiān)控功能。它引入了一些新的概念和功能,包括以下幾個(gè)主要方面:
- 單位(Unit):Systemd 使用單位(Unit)作為系統(tǒng)組件的基本單元。單位可以是服務(wù)(service)、套接字(socket)、設(shè)備(device)、掛載點(diǎn)(mount)等。每個(gè)單位都有一個(gè)對(duì)應(yīng)的配置文件,用于描述其行為和依賴關(guān)系。
- 依賴關(guān)系管理:Systemd 可以自動(dòng)解決單位之間的依賴關(guān)系。每個(gè)單位可以指定其所依賴的其他單位,Systemd 將根據(jù)依賴關(guān)系自動(dòng)按需啟動(dòng)或停止單位。
- 并行啟動(dòng):Systemd 支持并行啟動(dòng)系統(tǒng)單位,以提高系統(tǒng)的啟動(dòng)速度。它可以通過(guò)并行處理單位的依賴關(guān)系來(lái)最大程度地利用系統(tǒng)資源,加快啟動(dòng)過(guò)程。
- 日志管理:Systemd 引入了 Journal(日志)系統(tǒng),用于管理和存儲(chǔ)系統(tǒng)日志。Journal 提供了結(jié)構(gòu)化的日志記錄和高效的日志查詢功能,可以方便地檢查系統(tǒng)的運(yùn)行狀態(tài)和故障排查。
- 服務(wù)管理:Systemd 提供了強(qiáng)大的服務(wù)管理功能,可以啟動(dòng)、停止、重啟和管理系統(tǒng)服務(wù)。它支持服務(wù)的自動(dòng)重啟、進(jìn)程監(jiān)控和故障恢復(fù)等功能,提高了系統(tǒng)的可靠性和可用性。
- 控制接口:Systemd 提供了命令行工具和控制接口,用于管理和監(jiān)控系統(tǒng)。通過(guò) systemctl 命令可以查看和控制單位的狀態(tài),啟動(dòng)和停止服務(wù),查看系統(tǒng)日志等。
最直觀的體驗(yàn)就是, 通過(guò) Systemd 配置程序開機(jī)啟動(dòng)會(huì)非常簡(jiǎn)單且統(tǒng)一, 體驗(yàn)非常好
操作方式
# 所有指令都可以省略 后綴 .service, 如 systemctl enable myapp
# 設(shè)置開機(jī)自啟
systemctl enable myapp.service
# 取消開機(jī)自啟
systemctl disable myapp.service
# 啟動(dòng)
systemctl start myapp
# 停止
systemctl stop myapp
# 重載
systemctl reload myapp
配置方式
需要?jiǎng)?chuàng)建一個(gè) Systemd 服務(wù)單元文件,并在其中指定要在啟動(dòng)時(shí)運(yùn)行的命令或程序。
據(jù)說(shuō), 通過(guò)二進(jìn)制方式安裝的程序才需要手動(dòng)創(chuàng)建 Systemd 服務(wù)單元文件, 如 xxxx.service, 通過(guò) yum 等安裝的程序會(huì)自帶該文件且會(huì)自動(dòng)放到合適的位置, 可以直接執(zhí)行 systemctl enable xxxx.service 來(lái)啟用
創(chuàng)建服務(wù)單元文件:在 /etc/systemd/system/
或 /usr/lib/systemd/system
目錄下創(chuàng)建一個(gè)以 .service
為后綴的服務(wù)單元文件,例如myapp.service。
編輯服務(wù)單元文件:使用文本編輯器打開剛剛創(chuàng)建的服務(wù)單元文件,并將以下內(nèi)容粘貼到文件中:
[Unit]
Description=My App
After=network.target[Install]
WantedBy=multi-user.target[Service]
ExecStart=/path/to/your/app
Restart=always
User=your_username
Group=your_groupname
Environment="PATH=/usr/bin" "ANOTHER_ENV_VAR=some_value"
根據(jù)實(shí)際需求進(jìn)行適當(dāng)修改:
Description:服務(wù)的描述。
After:指定服務(wù)啟動(dòng)的依賴項(xiàng)。如果應(yīng)用需要網(wǎng)絡(luò)連接,請(qǐng)?jiān)O(shè)置為 network.target。
ExecStart:指定要在啟動(dòng)時(shí)運(yùn)行的命令或程序的完整路徑。將/path/to/your/app替換為實(shí)際命令或程序的路徑。
Restart:設(shè)置服務(wù)在出現(xiàn)問題時(shí)自動(dòng)重啟。
User和Group:指定運(yùn)行服務(wù)的用戶和組。將your_username和your_groupname替換為實(shí)際用戶和組名。
Environment:設(shè)置環(huán)境變量。可以根據(jù)需要添加多個(gè)環(huán)境變量。
WantedBy:指定服務(wù)所屬的運(yùn)行級(jí)別。將 multi-user.target 替換為所需的運(yùn)行級(jí)別。
保存并關(guān)閉文件。
重新加載Systemd配置:在終端中執(zhí)行以下命令,以重新加載Systemd配置并啟用新創(chuàng)建的服務(wù)單元文件:
systemctl daemon-reload
systemctl enable myapp.service
這將使 Systemd 在啟動(dòng)時(shí)自動(dòng)加載并運(yùn)行指定的服務(wù)。
啟動(dòng)服務(wù):
systemctl start myapp.service
檢查服務(wù)狀態(tài):
systemctl status myapp.service
如果一切正常,應(yīng)該看到服務(wù)的狀態(tài)為 綠色 “active”。
現(xiàn)在,服務(wù)已經(jīng)配置為開機(jī)自啟。在下一次重啟系統(tǒng)后,Systemd 將自動(dòng)加載并運(yùn)行該服務(wù)。
配置示例
# mysql
# https://dev.mysql.com/doc/mysql-secure-deployment-guide/8.0/en/secure-deployment-post-install.html[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target[Install]
WantedBy=multi-user.target[Service]
User=mysql
Group=mysql# Have mysqld write its state to the systemd notify socket
Type=notify# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS # Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql# Sets open_files_limit
LimitNOFILE = 10000Restart=on-failureRestartPreventExitStatus=1# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1PrivateTmp=false
# redis
[Unit]
Description=Redis Server
After=network.target[Install]
WantedBy=multi-user.target[Service]
ExecStart=/usr/local/bin/redis-server /usr/local/bin/redis.conf
Type=forking
PrivateTmp=true
# tomcat
[Unit]
Description=Tomcat 8.5.70
After=network.target[Install]
WantedBy=multi-user.target[Service]
ExecStart=/usr/local/bid/apache-tomcat-8.5.70/bin/startup.sh
Type=forking
PrivateTmp=true
參考
官方文檔 MySQL 8.0 參考手冊(cè) - 在 Linux 安裝 MySQL - 使用 Systemd 管理 MySQL - MySQL 8.0 安全部署向?qū)?- 安裝后操作 - 使用 Systemd 啟動(dòng) MySQL Server