[譯] Jetty 9 使用 jetty.sh 啓動 Unix 服務

每一個單獨發行的Jetty版本都有bin/jetty.sh這個腳本,能夠在各類Unix(包括OS X)系統中用來管理jetty的啓動。html

這個腳本適用於在Unix中把Jetty設置爲服務。java

快速啓動Jetty服務

如下是運行Jetty服務的最短步驟:web

[/opt/jetty]# tar -zxf /home/user/downloads/jetty-distribution-9.3.1-SNAPSHOT.tar.gz 
[/opt/jetty]# cd jetty-distribution-9.3.1-SNAPSHOT/
[/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT]# ls
bin        lib                         modules      resources  start.jar
demo-base  license-eplv10-aslv20.html  notice.html  start.d    VERSION.txt
etc        logs                        README.TXT   start.ini  webapps

[/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT]# cp bin/jetty.sh /etc/init.d/jetty
[/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT]# echo JETTY_HOME=`pwd` > /etc/default/jetty
[/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT]# cat /etc/default/jetty
JETTY_HOME=/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT

[/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT]# service jetty start
Starting Jetty: OK Wed Nov 20 10:26:53 MST 2013

從這個簡單的例子中,咱們能夠看到在/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT文件夾下的Jetty做爲Unix服務成功運行了。shell

這看起來都很好,可是你使用的是root角色運行的默認配置的Jetty服務。ubuntu

Jetty服務的實用性設置

有多種方式能夠實現這一點,這主要取決於你的Unix環境(或者是公司政策)。緩存

這裏假設咱們使用的是Linux系統(示例版本爲Ubuntu 12.04.3 LTS)。服務器

準備系統

# mkdir -p /opt/jetty
# mkdir -p /opt/web/mybase
# mkdir -p /opt/jetty/temp

如下是這幾個文件夾的做用:oracle

  • /opt/jetty 用於存放解壓後的Jetty發佈文件。
  • /opt/web/mybase 自定義用於存放web應用,包括全部能讓它們運行在服務器上的必要配置。
  • /opt/jetty/temp 這是分配給java服務的臨時文件夾(能夠把它看做是java.io.tmpdir這個系統屬性)。

這裏是故意保持和標準的臨時文件夾命名/tmp不同的,由於它還兼做servlet的規範工做目錄。(這是咱們的經驗,在長時間運行的Jetty服務器上,標準臨時目錄一般由各類清理腳本管理)app

確認你安裝了Java 7

Jetty${project.version}運行須要Java 7(或者以上),確保你安裝了合適的Java版本。eclipse

# apt-get install openjdk-7-jdk

或者下載Java7

# java -version
java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

# update-alternatives --list java
/usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

# update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      auto mode
  1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      manual mode
  2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1051      manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in manual mode.

# java -version
java version "1.7.0_25"
OpenJDK Runtime Environment (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)

建立用於運行Jetty的用戶

推薦建立一個指定的用戶用於運行Jetty,該用戶應該擁有運行Jetty的最小設置權限。

# useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty

這裏建立了一個名爲jetty的用戶,並屬於名爲jetty的組,不能訪問shell(/bin/false),主目錄在/opt/jetty/temp

下載並解壓你的發佈版本

能夠從Official Eclipse Download Site獲取一個發佈副本。

解壓到指定文件夾。

[/opt/jetty]# tar -zxf /home/user/Downloads/jetty-distribution-9.3.1-SNAPSHOT.tar.gz 
[/opt/jetty]# ls -F
jetty-distribution-9.3.1-SNAPSHOT/
[/opt/jetty]# mkdir /opt/jetty/temp

可能解壓出來的Jetty發佈文件夾名稱看起來看奇怪或不合理的,可是從Jetty9.1開始,${jetty.home}${jetty.base}分開能夠隔離你的web引用特殊的設置,從而更簡單地升級。

已經建立的/opt/jetty/temp做爲持久的目錄看成Jetty的緩存和工做目錄。許多Unix系統會按期清理/tmp文件夾,這種行爲在不是Servlet容器所指望的,並且會致使問題的發生,/opt/jetty/temp這個持久的目錄就是應對這種行爲的解決方案。

配置web應用

/opt/web/mybase這個文件夾就是${jetty.base},因此讓咱們配置它來保存你的應用及其配置。

*小貼士:在過去的Jetty版本中,你得在Jetty發佈目錄下操做修改或添加,雖然這依然支持,可是咱們鼓勵你設置一個合適的${jetty.base}目錄,由於這將有利於你在未來更容易升級Jetty的版本。

# cd /opt/web/mybase/
[/opt/web/mybase]# ls
[/opt/web/mybase]# java -jar /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/start.jar \
   --add-to-start=deploy,http,logging
WARNING: deploy          initialised in ${jetty.base}/start.ini (appended)
WARNING: deploy          enabled in     ${jetty.base}/start.ini
WARNING: server          initialised in ${jetty.base}/start.ini (appended)
WARNING: server          enabled in     ${jetty.base}/start.ini
WARNING: http            initialised in ${jetty.base}/start.ini (appended)
WARNING: http            enabled in     ${jetty.base}/start.ini
WARNING: server          enabled in     ${jetty.base}/start.ini
WARNING: logging         initialised in ${jetty.base}/start.ini (appended)
WARNING: logging         enabled in     ${jetty.base}/start.ini
[/opt/web/mybase]# ls -F
start.ini  webapps/

此時,你已經爲你的/opt/web/mybase啓用如下模塊:

deploy :這個模塊將執行/opt/web/mybase/webapps目錄下的web應用程序部署(war文件、解壓的目錄或可部署上下文的Jetty IoC XML文件)。

http:這個設置一個單獨的鏈接器,監聽基本的HTTP請求。能夠經過已經建立的start.ini文件配置鏈接器。

logging:當Jetty做爲服務運行的時候,開啓日誌是很是重要的。這個模塊將開啓捕獲基本的標準輸出和標準錯誤日誌記錄功能,並保存到到/opt/web/mybase/logs/文件夾。

參考Using start.jar 獲取更多關於如何配置${jetty.base}文件夾的信息。

複製一個war文件到目錄中。

# cp /home/user/projects/mywebsite.war /opt/web/mybase/webapps/

大多數服務設備但願Jetty是運行在80端口的,如今你有機會能夠把默認的8080改成80。
編輯/opt/web/mybase/start.ini並修改jetty.http.port的值。

# grep jetty.http.port /opt/web/mybase/start.ini
jetty.port=80

修改權限

修改Jetty發佈的權限,設置你建立的用戶能夠訪問你的web應用文件夾。

# chown --recursive jetty /opt/jetty
# chown --recursive jetty /opt/web/mybase

配置服務層

接下來咱們須要新建一個Jetty服務讓它在Unix系統中能夠和標準的服務同樣管理調用。

# cp /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/bin/jetty.sh /etc/init.d/jetty
# echo "JETTY_HOME=/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT" > /etc/default/jetty
# echo "JETTY_BASE=/opt/web/mybase" >> /etc/default/jetty
# echo "TMPDIR=/opt/jetty/temp" >> /etc/default/jetty

測試配置

# service jetty status
Checking arguments to Jetty: 
START_INI      =  /opt/web/mybase/start.ini
JETTY_HOME     =  /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT
JETTY_BASE     =  /opt/web/mybase
JETTY_CONF     =  /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/etc/jetty.conf
JETTY_PID      =  /var/run/jetty.pid
JETTY_START    =  /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/start.jar
JETTY_LOGS     =  /opt/web/mybase/logs
CLASSPATH      =  
JAVA           =  /usr/bin/java
JAVA_OPTIONS   =  -Djetty.state=/opt/web/mybase/jetty.state 
       -Djetty.logs=/opt/web/mybase/logs
       -Djetty.home=/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT 
       -Djetty.base=/opt/web/mybase 
       -Djava.io.tmpdir=/opt/jetty/temp
JETTY_ARGS     =  jetty-logging.xml jetty-started.xml
RUN_CMD        =  /usr/bin/java 
       -Djetty.state=/opt/web/mybase/jetty.state 
       -Djetty.logs=/opt/web/mybase/logs 
       -Djetty.home=/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT 
       -Djetty.base=/opt/web/mybase 
       -Djava.io.tmpdir=/opt/jetty/temp
       -jar /opt/jetty/jetty-distribution-9.3.1-SNAPSHOT/start.jar 
       jetty-logging.xml 
       jetty-started.xml

啓動你的服務

如今你有一個在/opt/web/mybase${jetty.base}和一個在/opt/jetty/jetty-distribution-9.3.1-SNAPSHOT的Jetty發佈版本,須要啓動服務才能讓它長時間的成爲服務級文件。

開始,啓動吧。

# service jetty start
Starting Jetty: OK Wed Nov 20 12:35:28 MST 2013

# service jetty check
..(snip)..
Jetty running pid=2958

[/opt/web/mybase]# ps u 2958
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
jetty     2958  5.3  0.1 11179176 53984 ?      Sl   12:46   0:00 /usr/bin/java -Djetty...

你如今應該讓它在服務器上運行,試一試。

原文連接: Startup a Unix Service using jetty.sh
相關文章
相關標籤/搜索