本系列文章是把作者剛接觸和學(xué)習(xí)Linux時候的實操記錄分享出來,內(nèi)容主要包括Linux入門的一些理論概念知識、Web程序、mysql數(shù)據(jù)庫的簡單安裝部署,希望能夠幫到一些初學(xué)者,少走一些彎路。
注意:
Linux下區(qū)分大小寫;
Linux多用戶多線程;
Linux下每個文件和目錄都有訪問權(quán)限;
systemctl服務(wù)service文件配置詳解
systemd服務(wù)#、#systemd服務(wù)service文件配置詳解#、#systemd服務(wù)配置詳解#
本文列出了常見的配置項說明,這里我們以nginx.service為例,查看nginx
# systemctl cat nginx.service
內(nèi)容如下
#service配置文件分為[Unit]、[Service]、[Install]三個部分。
#[Unit]部分:指定服務(wù)描述、啟動順序、依賴關(guān)系,包括Description、Documentation、After、Before、Wants、Requires。
[Unit]
#Description指定當(dāng)前服務(wù)的簡單描述。
Description=nginx代理服務(wù)
#Documentation指定服務(wù)的文檔,可以是一個或多個文檔的URL,可選,一般不用配置該項。
Documentation=http://nginx.org/en/docs
#啟動順序,After和Before。
#注意,After和Before字段只涉及啟動順序,不涉及依賴關(guān)系。
#After表示當(dāng)前服務(wù)在network.target之后啟動,可以指定多個服務(wù),以空格隔開。
After=network.target sshd.service
After=sshd-keygen.service
#Before表示當(dāng)前服務(wù)在tomcat.target之前啟動,可以設(shè)置多個,以空格隔開,可選,根據(jù)實際需要配置。
Before=tomcat.service
#依賴關(guān)系,Wants和Requires,可選,根據(jù)實際需要配置。
#Wants為"弱依賴"關(guān)系,即如果"mysqld.service"啟動失敗或停止運行,不影響nginx.service繼續(xù)執(zhí)行。
#Requires為"強依賴"關(guān)系,即如果"mysqld.service"啟動失敗或異常退出,那么nginx.service也必須退出。
#想要添加多個服務(wù),可以多次使用此選項,也可以設(shè)置一個空格分隔的服務(wù)列表。
#注意,Wants與Requires只涉及依賴關(guān)系,與啟動順序無關(guān),默認(rèn)情況下是同時啟動的。
Wants=mysqld.service
Requires=mysqld.service
#[Service]部分:指定啟動行為,包括Type、EnvironmentFile、ExecStart、ExecReload、ExecStop、PrivateTmp。
[Service]
#Type指定服務(wù)的啟動類型,必須為simple, exec, forking, oneshot, dbus, notify, idle 之一。常用simple和forking。
# simple(默認(rèn)值):ExecStart啟動的進程為該服務(wù)主進程。
# exec:exec與simple類似,不同之處在于,只有在該服務(wù)的主服務(wù)進程執(zhí)行完成之后,systemd才會認(rèn)為該服務(wù)啟動完成。 其他后繼單元必須一直阻塞到這個時間點之后才能繼續(xù)啟動。
# forking:ExecStart將以fork()方式啟動,此時父進程將會退出,子進程將成為主進程。
# oneshot:oneshot與simple類似,不同之處在于,只有在該服務(wù)的主服務(wù)進程退出之后,systemd才會認(rèn)為該服務(wù)啟動完成,才會開始啟動后繼單元。 此種類型的服務(wù)通常需要設(shè)置RemainAfterExit=選項。當(dāng)Type= 與 ExecStart=都沒有設(shè)置時,Type=oneshot 就是默認(rèn)值。
# dbus:類似于simple,但會等待D-Bus信號后啟動。
# notify:類似于simple,啟動結(jié)束后會發(fā)出通知信號,然后 Systemd 再啟動其他服務(wù)。
# idle:類似于simple,但是要等到其他任務(wù)都執(zhí)行完,才會啟動該服務(wù)。一種使用場合是為讓該服務(wù)的輸出,不與其他服務(wù)的輸出相混合。
# 建議對長時間持續(xù)運行的服務(wù)盡可能使用Type=simple(這是最簡單和速度最快的選擇)。注意,因為simple類型的服務(wù) 無法報告啟動失敗、也無法在服務(wù)完成初始化后對其他單元進行排序,所以,當(dāng)客戶端需要通過僅由該服務(wù)本身創(chuàng)建的IPC通道(而非由systemd創(chuàng)建的套接字或D-bus之類)連接到該服務(wù)的時候,simple類型并不是最佳選擇。在這種情況下, notify或dbus(該服務(wù)必須提供D-Bus接口)才是最佳選擇, 因為這兩種類型都允許服務(wù)進程精確的安排何時算是服務(wù)啟動成功、何時可以繼續(xù)啟動后繼單元。notify類型需要服務(wù)進程明確使用sd_notify()函數(shù)或類似的API,否則,可以使用forking作為替代(它支持傳統(tǒng)的UNIX服務(wù)啟動協(xié)議)。最后,如果能夠確保服務(wù)進程調(diào)用成功、服務(wù)進程自身不做或只做很少的初始化工作(且不大可能初始化失敗),那么exec將是最佳選擇。注意,因為使用任何 simple 之外的類型都需要等待服務(wù)完成初始化,所以可能會減慢系統(tǒng)啟動速度。 因此,應(yīng)該盡可能避免使用 simple 之外的類型(除非必須)。另外,也不建議對長時間持續(xù)運行的服務(wù)使用 idle 或 oneshot 類型。
Type=forking
#EnvironmentFile指定當(dāng)前服務(wù)的環(huán)境參數(shù)文件。該文件內(nèi)部的key=value鍵值對,可以用$key的形式,在當(dāng)前配置文件中獲取。
EnvironmentFile=/etc/nginx/nginx.conf
#啟動命令
# ExecStart指定啟動進程時執(zhí)行的命令。
# ExecReload指定當(dāng)該服務(wù)被要求重新載入配置時所執(zhí)行的命令。另外,還有一個特殊的環(huán)境變量 $MAINPID 可用于表示主進程的PID,例如可以這樣使用:/bin/kill -HUP $MAINPID。強烈建議將 ExecReload= 設(shè)為一個能夠確保重新加載配置文件的操作同步完成的命令行。
# ExecStop指定停止服務(wù)時執(zhí)行的命令。
# ExecStartPre指定啟動服務(wù)之前執(zhí)行的命令。不常用。
# ExecStartPost指定啟動服務(wù)之后執(zhí)行的命令。不常用。
# ExecStopPost指定停止服務(wù)之后執(zhí)行的命令。不常用。
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
# 設(shè)為 true表示在進程的文件系統(tǒng)名字空間中掛載私有的 /tmp 與 /var/tmp 目錄, 也就是不與名字空間外的其他進程共享臨時目錄。 這樣做會增加進程的臨時文件安全性,但同時也讓進程之間無法通過 /tmp 或 /var/tmp 目錄進行通信。
# 適用于web系統(tǒng)服務(wù),不適用于mysql之類的數(shù)據(jù)庫用戶服務(wù),數(shù)據(jù)庫用戶服務(wù)設(shè)為false。
PrivateTmp=true
#[Install]部分:指定服務(wù)的啟用信息,只有在systemctl的enable與disable命令在啟用/停用單元時才會使用此部分。
[Install]
# “WantedBy=multi-user.target”表示當(dāng)系統(tǒng)以多用戶方式(默認(rèn)的運行級別)啟動時,這個服務(wù)需要被自動運行。
WantedBy=multi-user.target
在這里插入圖片描述
IT小胖豆:初學(xué)者踩坑之路及過程分享,希望能夠幫到一些初學(xué)者,歡迎各位IT打工人,入坑討論-_-