centos 7中采用了systemd控制系統(tǒng)服務(wù)忙迁,更加簡單,以前啟動服務(wù)需要 service xxxx start|stop等徙歼。
現(xiàn)在需要的是systemctl start|stop xxx犁河。
比如我配置的啟動tomcat,systemctl start tomcat,十分方便魄梯。以前是在桨螺,現(xiàn)在直接在/usr/lib/systemd/system里面新建一個tomcat.service,內(nèi)容如下:
[Unit]
Description=tomcatapi
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/soft/tomcat/tomcat8/bin/startup.sh
ExecReload=
ExecStop=/usr/local/soft/tomcat/tomcat8/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
然后給這個tomcat.service 文件chomod +x權(quán)限即可酿秸!最后在重啟下systemctl灭翔,命令如下:
# systemctl daemon-reload
最后就可以通過systemctl start tomcat啟動啦!
上面的tomcat.service需要按需更改允扇。里面的路徑不一樣缠局。
以下是轉(zhuǎn)載的:
設(shè)置分為三個部份
[Unit]: unit 本身的說明则奥,以及與其他相依 daemon 的設(shè)置,包括在什么服務(wù)之后才啟動此 unit 之類的設(shè)置值狭园;
[Service], [Socket], [Timer], [Mount], [Path]..:不同的 unit type 就得要使用相對應(yīng)的設(shè)置項目读处。我們拿的是 sshd.service 來當范本,所以這邊就使用 [Service] 來設(shè)置唱矛。 這個項目內(nèi)主要在規(guī)范服務(wù)啟動的腳本罚舱、環(huán)境配置文件文件名、重新啟動的方式等等绎谦。
[Install]:這個項目就是將此 unit 安裝到哪個 target 里面去的意思管闷!
至于配置文件內(nèi)有些設(shè)置規(guī)則還是得要說明一下:
設(shè)置項目通常是可以重復的,例如我可以重復設(shè)置兩個 After 在配置文件中窃肠,不過包个,后面的設(shè)置會取代前面的喔!因此冤留,如果你想要將設(shè)置值歸零碧囊, 可以使用類似“ After= ”的設(shè)置,亦即該項目的等號后面什么都沒有纤怒,就將該設(shè)置歸零了 (reset)糯而。
如果設(shè)置參數(shù)需要有“是/否”的項目 (布林值, boolean),你可以使用 1, yes, true, on 代表啟動泊窘,用 0, no, false, off 代表關(guān)閉熄驼!隨你喜好選擇啰!
空白行烘豹、開頭為 # 或 ; 的那一行瓜贾,都代表注解!
每個部份里面還有很多的設(shè)置細項吴叶,我們使用一個簡單的表格來說明每個項目好了阐虚!
[Unit] 部份
Description :就是當我們使用 systemctl list-units 時,會輸出給管理員看的簡易說明蚌卤!當然实束,使用 systemctl status 輸出的此服務(wù)的說明,也是這個項目;
Documentation :這個項目在提供管理員能夠進行進一步的文件查詢的功能逊彭!提供的文件可以是如下的數(shù)據(jù):Documentation=http://www.... Documentation=man:sshd(8) Documentation=file:/etc/ssh/sshd_config;
After :說明此 unit 是在哪個 daemon 啟動之后才啟動的意思咸灿!基本上僅是說明服務(wù)啟動的順序而已,并沒有強制要求里頭的服務(wù)一定要啟動后此 unit 才能啟動侮叮。 以 sshd.service 的內(nèi)容為例避矢,該文件提到 After 后面有 network.target 以及 sshd-keygen.service,但是若這兩個 unit 沒有啟動而強制啟動 sshd.service 的話, 那么 sshd.service 應(yīng)該還是能夠啟動的审胸!
Before :與 After 的意義相反亥宿,是在什么服務(wù)啟動前最好啟動這個服務(wù)的意思。不過這僅是規(guī)范服務(wù)啟動的順序砂沛,并非強制要求的意思烫扼。
Requires :明確的定義此 unit 需要在哪個 daemon 啟動后才能夠啟動!就是設(shè)置相依服務(wù)啦碍庵!如果在此項設(shè)置的前導服務(wù)沒有啟動映企,那么此 unit 就不會被啟動!
Wants :與 Requires 剛好相反静浴,規(guī)范的是這個 unit 之后最好還要啟動什么服務(wù)比較好的意思堰氓!不過,并沒有明確的規(guī)范就是了苹享!主要的目的是希望創(chuàng)建讓使用者比較好操作的環(huán)境双絮。 因此,這個 Wants 后面接的服務(wù)如果沒有啟動得问,其實不會影響到這個 unit 本身掷邦!
Conflicts :代表沖突的服務(wù)!亦即這個項目后面接的服務(wù)如果有啟動椭赋,那么我們這個 unit 本身就不能啟動!我們 unit 有啟動或杠,則此項目后的服務(wù)就不能啟動哪怔! 反正就是沖突性的檢查啦!
接下來了解一下在 [Service] 當中有哪些項目可以使用向抢!
[Service] 部份
Type: 說明這個 daemon 啟動的方式认境,會影響到 ExecStart 喔!一般來說挟鸠,有下面幾種類型 simple:默認值叉信,這個 daemon 主要由 ExecStart 接的指令串來啟動,啟動后常駐于內(nèi)存中艘希。forking:由 ExecStart 啟動的程序通過 spawns 延伸出其他子程序來作為此 daemon 的主要服務(wù)硼身。原生的父程序在啟動結(jié)束后就會終止運行。 傳統(tǒng)的 unit 服務(wù)大多屬于這種項目覆享,例如 httpd 這個 WWW 服務(wù)佳遂,當 httpd 的程序因為運行過久因此即將終結(jié)了,則 systemd 會再重新生出另一個子程序持續(xù)運行后撒顿, 再將父程序刪除丑罪。據(jù)說這樣的性能比較好!!oneshot:與 simple 類似吩屹,不過這個程序在工作完畢后就結(jié)束了跪另,不會常駐在內(nèi)存中。dbus:與 simple 類似煤搜,但這個 daemon 必須要在取得一個 D-Bus 的名稱后免绿,才會繼續(xù)運行!因此設(shè)置這個項目時宅楞,通常也要設(shè)置 BusName= 才行针姿!idle:與 simple 類似,意思是厌衙,要執(zhí)行這個 daemon 必須要所有的工作都順利執(zhí)行完畢后才會執(zhí)行距淫。這類的 daemon 通常是開機到最后才執(zhí)行即可的服務(wù)!比較重要的項目大概是 simple, forking 與 oneshot 了婶希!畢竟很多服務(wù)需要子程序 (forking)榕暇,而有更多的動作只需要在開機的時候執(zhí)行一次(oneshot),例如文件系統(tǒng)的檢查與掛載啊等等的喻杈。
EnvironmentFile :可以指定啟動腳本的環(huán)境配置文件彤枢!例如 sshd.service 的配置文件寫入到 /etc/sysconfig/sshd 當中!你也可以使用 Environment= 后面接多個不同的 Shell 變量來給予設(shè)置筒饰!
ExecStart :就是實際執(zhí)行此 daemon 的指令或腳本程序缴啡。你也可以使用 ExecStartPre (之前) 以及 ExecStartPost (之后) 兩個設(shè)置項目來在實際啟動服務(wù)前,進行額外的指令行為瓷们。 但是你得要特別注意的是业栅,指令串僅接受“指令 參數(shù) 參數(shù)...”的格式,不能接受 <, >, >>, |, & 等特殊字符谬晕,很多的 bash 語法也不支持喔碘裕! 所以,要使用這些特殊的字符時攒钳,最好直接寫入到指令腳本里面去帮孔!不過,上述的語法也不是完全不能用不撑,亦即文兢,若要支持比較完整的 bash 語法,那你得要使用 Type=oneshot 才行喔焕檬! 其他的 Type 才不能支持這些字符禽作。
ExecStop :與 systemctl stop 的執(zhí)行有關(guān),關(guān)閉此服務(wù)時所進行的指令揩页。
ExecReload: 與 systemctl reload 有關(guān)的指令行為
Restart: 當設(shè)置 Restart=1 時旷偿,則當此 daemon 服務(wù)終止后烹俗,會再次的啟動此服務(wù)。舉例來說萍程,如果你在 tty2 使用文字界面登陸幢妄,操作完畢后登出,基本上茫负,這個時候 tty2 就已經(jīng)結(jié)束服務(wù)了蕉鸳。 但是你會看到屏幕又立刻產(chǎn)生一個新的 tty2 的登陸畫面等待你的登陸!那就是 Restart 的功能忍法!除非使用 systemctl 強制將此服務(wù)關(guān)閉潮尝,否則這個服務(wù)會源源不絕的一直重復產(chǎn)生!
RemainAfterExit :當設(shè)置為 RemainAfterExit=1 時饿序,則當這個 daemon 所屬的所有程序都終止之后勉失,此服務(wù)會再嘗試啟動。這對于 Type=oneshot 的服務(wù)很有幫助原探!
TimeoutSec: 若這個服務(wù)在啟動或者是關(guān)閉時乱凿,因為某些緣故導致無法順利“正常啟動或正常結(jié)束”的情況下,則我們要等多久才進入“強制結(jié)束”的狀態(tài)咽弦!
KillMode: 可以是 process, control-group, none 的其中一種徒蟆,如果是 process 則 daemon 終止時,只會終止主要的程序 (ExecStart 接的后面那串指令)型型,如果是 control-group 時段审, 則由此 daemon 所產(chǎn)生的其他 control-group 的程序,也都會被關(guān)閉闹蒜。如果是 none 的話戚哎,則沒有程序會被關(guān)閉喔!
RestartSec 與 Restart 有點相關(guān)性嫂用,如果這個服務(wù)被關(guān)閉,然后需要重新啟動時丈冬,大概要 sleep 多少時間再重新啟動的意思嘱函。默認是 100ms (毫秒)。
最后埂蕊,再來看看那么 Install 內(nèi)還有哪些項目可用往弓?
[Install] 部份
WantedBy: 這個設(shè)置后面接的大部分是 *.target unit !意思是蓄氧,這個 unit 本身是附掛在哪一個 target unit 下面的函似!一般來說,大多的服務(wù)性質(zhì)的 unit 都是附掛在 multi-user.target 下面喉童!
Also 當目前這個 unit 本身被 enable 時撇寞,Also 后面接的 unit 也請 enable 的意思!也就是具有相依性的服務(wù)可以寫在這里呢!
Alias 進行一個鏈接的別名的意思蔑担!當 systemctl enable 相關(guān)的服務(wù)時牌废,則此服務(wù)會進行鏈接文件的創(chuàng)建!以 multi-user.target 為例啤握,這個家伙是用來作為默認操作環(huán)境 default.target 的規(guī)劃鸟缕, 因此當你設(shè)置用成 default.target 時,這個 /etc/systemd/system/default.target 就會鏈接到 /usr/lib/systemd/system/multi-user.target 啰排抬!