本系列不是爲Linux運維人員準備的,而是主要爲開發人員準備的,包括但不限於:
但願瞭解Linux的開發人員;
須要在Linux上部署一些組件的開發人員,如Memcached/Nginx/Redis等;
須要使用一些在Linux上部署運行效果可能會更好的效果的系統,如Jetkins、SVN、JavaMelody等。
但願瞭解一些當前較熱的技術,想在虛擬機裏搭建個環境把玩一番的,如.Net Core/Hadoop等。
所以在本系列文章中不會去講Linux及各個分支的歷史,也不會去講Linux與Windows相比的優缺點,更不會講Linux Shell如何編程,涉及到這些知識也會較快帶過,本系列文章主要是講如何在虛擬機快速搭建起一個可運行和觀察效果的環境。
1.前言
書接前兩回,前面已經講了如何安裝配置免費開源的虛擬機軟件VirtualBox以及如何在VirtualBox中安裝並配置CentOS7。在本篇將講述如何在CentOS7中安裝JDK和Tomcat,爲從此的須要,本篇將介紹如何安裝Oracle JDK8和Tomcat8。html
2.軟件準備
本篇採用tar.gz安裝,固然也能夠採用rpm方式安裝或yum方式安裝,至於後兩種安裝方式感興趣的請自行查閱相關文章。
JDK文件:jdk-8u131-linux-x64.tar.gz
官方下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Tomcat文件:apache-tomcat-8.5.15.tar.gz
官方下載地址:http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz
或:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
注意:由於在前兩篇文章中都是以CentOS7 x64來介紹的,因此這裏下載的壓縮包也都是x64的。
3.安裝Oracle JDK
3.1卸載OpenJDK
採用前面的方式安裝CentOS7時,默認安裝了OpenJDK1.8的,OpenJDK其實就是也是在Java規範上的另外一種實現,就如同Mono也是按照微軟的.NET規範實現的同樣,在一個平臺上編譯後的文件能夠直接在另外一個平臺上運行,反正幾年前我就幹過在Windows上用Microsoft Visual Studio編寫ASP.NET程序而後放在Linux系統上藉助Apache+Mono+xsp運行。
由於後面還有更多內容依賴於Java,因此這裏就卸載OpenJDK而安裝Oracle JDK了。
檢查當前系統是否安裝JDK,運行命令:java
rpm -qa | grep jdk
獲得結果以下:linux
java-1.8.0-openjdk-headless-1.8.0.131-2.b11.el7_3.x86_64 java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64 copy-jdk-configs-1.2-1.el7.noarch
卸載OpenJDK,運行命令:shell
yum remove java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64 yum remove java-1.8.0-openjdk-headless-1.8.0.131-2.b11.el7_3.x86_64
此時若是再運行rpm -qa | grep jdk就會看到java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64被卸載了。apache
3.2安裝Oracle JDK
按照本文提供的地址將jdk-8u131-linux-x64.tar.gz下載到宿主機,而後藉助SSH客戶端軟件SSHSecureShellClient上傳到/root目錄。
解壓文件到/usr/local目錄:編程
cd /root tar –zxf /root/jdk-8u131-linux-x64.tar.gz –C /usr/local
解壓後會在/usr/local目錄下多出一個jdk1.8.0_131文件夾來。
注意:/usr/local/ jdk1.8.0_131這個目錄在設置JDK環境變量時會用到。vim
下面就須要配置環境變量了,告訴系統Java的相關信息,如安裝路徑、類庫路徑等。這裏有兩種配置方式:一種是爲指定用戶配置,一種是爲全部用戶配置,若是隻爲某個用戶配置那麼只需在該用戶目錄下的.bashrc文件中設置便可,若是須要給全部用戶設置,那麼就須要在/etc/profile中設置,這裏以全局設置爲例,打開/etc/profile文件在最後添加以下內容:tomcat
export JAVA_HOME=/usr/local/jdk1.8.0_131 export JRE_HOME=/usr/local/jdk1.8.0_131 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
而後使配置生效,執行以下命令:bash
source /etc/profile
如今能夠檢查Java環境變量是否配置正確了,經過java –version命令,在本人機器上獲得以下輸出:微信
[root@localhost ~]# java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
至此,Oracle JDK已正確安裝。
4.安裝Tomcat8
按照本文提供的地址將apache-tomcat-8.5.15.tar.gz下載至本地宿主機(注:也可在能訪問互聯網的虛擬機上直接用wget下載到虛擬機上),而後藉助SSH客戶端軟件SSHSecureShellClient上傳到/root目錄。
解壓文件到/usr/local目錄:
tar –zxf /root/apache-tomcat-8.5.15.tar.gz –C /usr/local
解壓後會在usr/local目錄下多出一個apache-tomcat-8.5.15文件夾來。
注意:/usr/local/ apache-tomcat-8.5.15這個目錄在設置Tomcat環境變量時會用到。固然,也能夠不設置Tomcat相關的環境變量,使用相關腳本對Tomcat進行操做時會自動檢測這些環境變量。
至此,Tomcat已經安裝完成。
經過以下命令啓動Tomcat:
/usr/local/ apache-tomcat-8.5.15/bin/startup.sh
若是要關閉Tomcat也很簡單,執行以下命令:
/usr/local/ apache-tomcat-8.5.15/bin/stop.sh
注意:使用/usr/local/apache-tomcat-8.5.15/bin/catalina.sh加上參數也能夠啓動或者中止Tomcat,如 /usr/local/ apache-tomcat-8.5.15/bin/catalina.sh start來啓動Tomcat,/usr/local/ apache-tomcat-8.5.15/bin/catalina.sh stop來中止Tomcat,除此以外還可使用debug/run/configtest/version參數,不過沒有restart參數來重啓Tomcat。
能夠在虛擬機打開http://localhost:8080觀看那個屬性的Tomcat起始頁了,在宿主機中則要以虛擬機的IP地址來訪問了(前提是虛擬機至少有一個網卡是橋接模式),在本人機器上虛擬機有個網卡是橋接的,IP地址爲:192.168.60.198,與宿主機在一個網段,所以能夠以http://192.168.60.198:8080來查看了,以下圖所示:
注意:若是能夠經過ssh鏈接虛擬機但不能打開http://192.168.60.198:8080,那麼頗有多是防火牆問題,執行以下命令關閉防火牆:
systemctl disable firewalld
重啓後便可訪問。
5.在CentOS7爲Tomcat添加服務(使用systemd來操做Tomcat)
爲了能讓Tomcat可以隨CentOS7啓動,其實就是可以經過systemctl start/stop/restart來控制Tomcat。在網上有很多在CentOS7之前版本中的例子,都是經過在/etc/rc.d/init.d或/etc/init.d目錄中添加腳原本實現的,在CentOS7中提供了另一種方式,使用systemd來替代了service,具體就是在/usr/lib/systemd/system或/etc/systemd/system/目錄添加控制命令,Systemd約定,服務的Unit文件需放置在 /etc/systemd/system 或 /usr/lib/systemd/system 目錄中,一般將其放在/etc/systemd/system目錄中。
5.1Systemctl用法
在CentOS7中有關係統服務的命令有:
systemctl list-units(等同於systemctl):列出激活的服務
systemctl --failed:列出運行失敗的服務
systemctl daemon-reload:掃描新的或有變更的服務
systemctl status A.serivice:查看A這個服務的啓動信息(注意在運行時須要將A這個名稱改成具體的service的名字,下同,如SSH服務對應的sshd.service),這個命令在啓動服務失敗時查看緣由很是有用
systemctl enable A.service:設置A這個service隨系統一塊兒啓動
systemctl disable A.service:禁止A這個service隨系統一塊兒啓動
systemctl start A.service:啓動A這個service
systemctl stop A.service:中止A這個service
systemctl restart A.service:從新啓動A這個service
注意:在實際操做中,上述命令中A.service可簡化爲A,如systemctl enable A.service可簡化爲systemctl enable A。
5.2給Tomcat增長啓動參數
前面的講述瞭如何安裝Oracle JDK8和Tomcat8.5,並展現了使用Tomcat安裝位置下的bin目錄中的startup.sh/stop.sh或catalina.sh start/catalina.sh stop來啓動或者關閉Tomcat。但在實際開發中咱們仍是但願Tomcat可以在系統啓動的時候自動啓動,而不是手工經過命令行來啓動,下面就講述如何將Tomcat添加到CentOS7的啓動服務中。
首先咱們記住如下三點:
1.Oracle JDK8安裝目錄:/usr/local/jdk1.8.0_131
2.Tomcat8安裝目錄:/usr/local/apache-tomcat-8.5.15
3.而且在/etc/profile中配置了Java相關的環境變量:
export JAVA_HOME=/usr/local/jdk1.8.0_131
export JRE_HOME=/usr/local/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin首先須要在Tomcat的安裝目錄下的bin目錄下增長setenv.sh文件,能夠經過vim /usr/local/ apache-tomcat-8.5.15/bin/setenv.sh來建立文件,並將以下內容粘貼進去後保存:
#set JAVA_HOME and JRE_HOME and CATALINA_HOME and CATALINA_BASE export JAVA_HOME=/usr/local/jdk1.8.0_131 export JRE_HOME=/usr/local/jdk1.8.0_131/jre export CATALINA_HOME=/usr/local/apache-tomcat-8.5.15 export CATALINA_BASE=/usr/local/apache-tomcat-8.5.15 #set JAVA_HOME and JRE_HOME and CATALINA_HOME and CATALINA_BASE #add tomcat pid CATALINA_PID="$CATALINA_BASE/tomcat.pid" #add Java opts JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"
也就是設置JAVA_HOME /JRE_HOME/CATALINA_HOME/CATALINA_BASE/CATALINA_PID五個環境變量。
注意:
1.剛剛創建的setenv.sh文件會在經過執行catalina.sh來啓動Tomcat時被自動調用。
2.由於在Linux中存在着交互式shell和非交互式shell,交互式shell顧名思義就是在與用戶的交互過程當中執行的shell,一般是經過SSH登陸到Linux系統以後輸入shell腳本或命令等待用戶輸入或者確認而後執行的shell,而非交互式shell則是無需用戶干預的shell,如一些service的啓動等。交互式shell從/etc/profile中讀取全部用戶的環境變量設置,非交互式shell則從/etc/bashrc中讀取全部用戶的環境變量設置。所以可能會出如今交互式環境下執行shell腳本沒有問題,在非交互式環境下執行shell腳本則會出現找不到環境變量配置信息的問題。
3.另外由於配置了tomcat.pid文件,因此在啓動Tomcat時會在Tomcat根目錄自動生成tomcat.pid文件,中止Tomcat以後tomcat.pid文件會自動被刪除。使用tomcat.pid能夠作到防止屢次執行catalina.sh或startup.sh啓動Tomcat時會啓動多個實例的情形。5.3建立tomcat.service文件
接着增長tomcat.service文件,能夠經過vim /usr/lib/systemd/system/tomcat.service來建立文件並下如下內容粘貼進去,而後保存:
[Unit] Description=Apache Tomcat 8.5.15 After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/apache-tomcat-8.5.15/tomcat.pid ExecStart=/usr/local/apache-tomcat-8.5.15/bin/startup.sh ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target chmod 755 /usr/lib/systemd/system/tomcat.service
別忘了給這個文件增長執行權限:
而後能夠執行以下命令來檢驗是否配置正確:
systemctl enable tomcat.service:設置tomcat這個service隨系統一塊兒啓動
systemctl disable tomcat.service:禁止tomcat這個service隨系統一塊兒啓動
systemctl start tomcat.service:啓動tomcat這個service
systemctl stop tomcat.service:中止tomcat這個service
systemctl restart tomcat.service:從新啓動tomcat這個service
5.4service文件結構說明
上面講述的tomcat.service文件包含[unit]、[service]、[install]三部分,其中:
5.4.1[unit]
Unit部分描述服務的基本信息和啓動順序,在本實例中規定了在network啓動以後執行,unit部分可包含以下內容:
Description : 服務的簡單描述
Documentation : 服務文檔
Before、After:定義啓動順序。Before=xxx.service,表明本服務在xxx.service啓動以前啓動。After=xxx.service,表明本服務在xxx.service以後啓動。
Requires:這個單元啓動了,它須要的單元也會被啓動;它須要的單元被中止了,這個單元也中止了。
Wants:推薦使用。這個單元啓動了,它須要的單元也會被啓動;它須要的單元被中止了,對本單元沒有影響。
5.4.2[service]
在這部分咱們配置tomcat服務的pid,服務的啓動,中止,重啓命令,service部分可包含以下內容:
Type=simple(默認值):systemd認爲該服務將當即啓動。服務進程不會fork。若是該服務要啓動其餘服務,不要使用此類型啓動,除非該服務是socket激活型。
Type=forking:systemd認爲當該服務進程fork,且父進程退出後服務啓動成功。對於常規的守護進程(daemon),除非你肯定此啓動方式沒法知足需求,使用此類型啓動便可。使用此啓動類型應同時指定 PIDFile=,以便systemd可以跟蹤服務的主進程。
Type=oneshot:這一選項適用於只執行一項任務、隨後當即退出的服務。可能須要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出以後仍然認爲服務處於激活狀態。
Type=notify:與 Type=simple 相同,但約定服務會在就緒後向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式啓動,當指定的 BusName 出如今DBus系統總線上時,systemd認爲服務就緒。
Type=idle: systemd會等待全部任務(Jobs)處理完成後,纔開始執行idle類型的單元。除此以外,其餘行爲和Type=simple 相似。
PIDFile:pid文件路徑
ExecStart:指定啓動單元的命令或者腳本,ExecStartPre和ExecStartPost節指定在ExecStart以前或者以後用戶自定義執行的腳本。Type=oneshot容許指定多個但願順序執行的用戶自定義命令。
ExecReload:指定單元從新加載時執行的命令或者腳本。
ExecStop:指定單元中止時執行的命令或者腳本。
PrivateTmp:True表示給服務分配獨立的臨時空間
Restart:這個選項若是被容許,服務重啓的時候進程會退出,會經過systemctl命令執行清除並重啓的操做。
RemainAfterExit:若是設置這個選擇爲真,服務會被認爲是在激活狀態,即便因此的進程已經退出,默認的值爲假,這個選項只有在Type=oneshot時須要被配置。
5.4.3[install]
在這部分咱們配置了tomcat運行時的使用用戶。在這部分可包含以下內容:
Alias:爲單元提供一個空間分離的附加名字。
RequiredBy:單元被容許運行須要的一系列依賴單元,RequiredBy列表從Require得到依賴信息。
WantBy:單元被容許運行須要的弱依賴性單元,Wantby從Want列表得到依賴信息。
Also:指出和單元一塊兒安裝或者被協助的單元。
DefaultInstance:實例單元的限制,這個選項指定若是單元被容許運行默認的實例。
6.總結
本篇講述瞭如何在CentOs7上安裝Oracle JDK和Tomcat,同時也對交互式shell和非交互式shell讀取環境變量的不一樣之處作了比較,交互式shell從/etc/profile中讀取全部用戶的環境變量設置,非交互式shell則從/etc/bashrc中讀取全部用戶的環境變量設置。最後還演示瞭如何將Tomcat配置成service,保持和系統一塊兒啓動。
聲明:本文首發於本人我的微信訂閱號:zhoujinqiaoIT,其後會同時在本人的CSDN、51CTO及oschina三處博客發佈,本人會負責在此四處答疑。