[译] 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
相关文章
相关标签/搜索