在windows安装服务

OrientDB是一个Java服务器应用。大多数服务器应用有个共同的特点,他们在被关闭VM进程前,需要执行一些任务,因此需要一个轻便的方式通知VM将关闭。 眼下, 唯一可能关闭OrientDB Server实例(非内嵌)的方式就是执行 shutdown.bat (或者 shutdown.sh) OrientDB部署后附带的脚本, 但是这也取决于用户是否关心这个通知。这也意味着当部署服务端实例的机器没有通过以上脚本执行时,会被不正确的关闭。

Apache Commons Daemon

Apache Commons Daemon 是一个应用程序和API的集合,可以使Java服务程序像windows和Unix下原生服务的服务程序一样运行。Unix下, 后台运行的服务程序叫做 daemons,通过操作系统一系列指定的signals控制. 在 Windows下, 这样的程序叫做服务,可以通过二进制程序指定的函数进行控制。尽管运行daemons或者 services有所不同, 两种情况下操作系统都可以通知服务应用马上就要停止,正在运行的应用有可能在执行的进程被杀掉之前去执行一些特定的任务。将OrientDB包装为Unix daemon或者Windows service就可以通过Unix和Windows操作系统提供的原生机制去管理服务端应用的生命周期。

安装

这个教程主要讲Windows, 所以你需要下载procrunProcrun是一个程序集合,可以允许Windows用户将大多数Java应用(例如Tomcat)包装成Windows服务。这个服务可以被设置为自动启动,当机器重启和机器上无登录用户的情况下。

  1. 在浏览器上打开 Apache Commons Daemon download page.
  2. 点击Browse native binaries download area...: 你将会看到目录索引commons/daemon/binaries/ (页面的标题也可能是 Index of dist/commons).
  3. 点击windows. 你会看到目录索引 commons/daemon/binaries/windows.
  4. 点击commons-daemon-1.0.7-bin-windows.zip开始下载。
  5. 解压你选择目录下的文件。 文档的内容如下:
commons-daemon-1.0.7-bin-windows
|
\---amd64
    |
    \---prunsrv.exe
|
\---ia64
    |
    \---prunsrv.exe
|
\---LICENCE.txt
|
\---NOTICE.txt
|
\---prunmgr.exe
|
\---prunsrv.exe
|
\---RELEASE-NOTES.txt

prunmgr是一个GUI程序,用来监控和配置通过prorun包装的Windows服务。prunsrv是一个服务应用,可以将应用当做服务运行。它可以将任何应用(不仅仅是Java应用)转化为服务运行。amd64目录包含了prunsrv针对x86-64机器的所有版本,ia64目录包含了prunsrv针对 Itanium 64机器的所有版本。

一旦你下载完毕后,你需要将下载的应用放到你的OrientDB安装目录下。

  1. 到OrientDB目录下, 也就是%ORIENTDB_HOME%指向的目录
  2. 创建目录service
  3. 根据你的机器,将对应的版本的prunsrvprunmgr复制进来。

配置

这部分,我们将展示如何把OrientDB包装成一个Windows服务。 为了将OrientDB包装成一个服务,你需要使用prunsrv程序运行一个脚本来配置一个Windows服务。

在定义windows服务之前,你需要根据你服务的名字重命名prunsrvprunmgr。这两个程序都需要这个服务的名字作为参数去管理和监控,但是你也可以避免使用服务的名字。在这种情况下,你可以命名为OrientDBGraphOrientDBGraphwOrientDBGraph是服务的名字,接下来你可以配置它。如果你想用一个不一样的服务名称,你也可以命名为myservicenamemyservicenamew (例如,如果你包装OrientDB名字可以起成OrientDB,对应的prunsrv命名为OrientDBprunmgr命名为OrientDBw).

之后,创建文件%ORIENTDB_HOME%\service\installService.bat,内容如下:

:: OrientDB Windows Service Installation
@echo off
rem Remove surrounding quotes from the first parameter
set str=%~1
rem Check JVM DLL location parameter
if "%str%" == "" goto missingJVM
set JVM_DLL=%str%
rem Remove surrounding quotes from the second parameter
set str=%~2
rem Check OrientDB Home location parameter
if "%str%" == "" goto missingOrientDBHome
set ORIENTDB_HOME=%str%

set CONFIG_FILE=%ORIENTDB_HOME%/config/orientdb-server-config.xml
set LOG_FILE=%ORIENTDB_HOME%/config/orientdb-server-log.properties
set LOG_CONSOLE_LEVEL=info
set LOG_FILE_LEVEL=fine
set WWW_PATH=%ORIENTDB_HOME%/www
set ORIENTDB_ENCODING=UTF8
set ORIENTDB_SETTINGS=-Dprofiler.enabled=true -Dcache.level1.enabled=false -Dcache.level2.strategy=1
set JAVA_OPTS_SCRIPT=-XX:+HeapDumpOnOutOfMemoryError

rem Install service
OrientDBGraphX.X.X.exe //IS --DisplayName="OrientDB GraphEd X.X.X" ^
--Description="OrientDB Graph Edition, aka GraphEd, contains OrientDB server integrated with the latest release of the TinkerPop Open Source technology stack supporting property graph data model." ^
--StartClass=com.orientechnologies.orient.server.OServerMain --StopClass=com.orientechnologies.orient.server.OServerShutdownMain ^
--Classpath="%ORIENTDB_HOME%\lib\*" --JvmOptions "-Dfile.Encoding=%ORIENTDB_ENCODING%;-Djava.util.logging.config.file="%LOG_FILE%";-Dorientdb.config.file="%CONFIG_FILE%";-Dorientdb.www.path="%WWW_PATH%";-Dlog.console.level=%LOG_CONSOLE_LEVEL%;-Dlog.file.level=%LOG_FILE_LEVEL%;-Dorientdb.build.number="@BUILD@";-DORIENTDB_HOME=%ORIENTDB_HOME%" ^
--StartMode=jvm --StartPath="%ORIENTDB_HOME%\bin" --StopMode=jvm --StopPath="%ORIENTDB_HOME%\bin" --Jvm="%JVM_DLL%" --LogPath="%ORIENTDB_HOME%\log" --Startup=auto

EXIT /B

:missingJVM
echo Insert the JVM DLL location
goto printUsage

:missingOrientDBHome
echo Insert the OrientDB Home
goto printUsage

:printUsage
echo usage:
echo     installService JVM_DLL_location OrientDB_Home
EXIT /B

这个脚本需要两个输入参数:

  1. jvm.dll的位置,例如C:\Program Files\Java\jdk1.6.0_26\jre\bin\server\jvm.dll
  2. OrientDB安装目录,例如D:\orientdb-graphed-1.0rc5

当以合适的命令和参数执行OrientDBGraph.exe(原来的prunsrv),服务才实际被安装。 命令行参数//IS表示程序的执行将会进行一个服务的安装。 下面这个表格就是上面脚本的命令行参数:

参数名称描述来源
--DisplayNamewindows服务管理器显示的名称自定义
--Descriptionwindows服务管理器显示的描述Custom
--StartClass包含启动方法的类(= 启动应用程序的方法). 默认的方法名称是 main 脚本*/bin/server.bat*调用的类
--StopClass接受服务停止信号的处理类。默认的方法名称是main脚本*/bin/shutdown.bat* 调用的类
--Classpath设置java类路径脚本_%ORIENTDB_HOME%\bin\server.bat_的-cp参数指定的值
--JvmOptions传递给JVM的选项,用#或者;分隔 _%ORIENTDB_HOME%\bin\server.bat_脚本 -D 或者 -X指定的选项和ORIENTDB_HOME定义的系统属性
--StartMode指定如何启动进程。这种情况下,将作为一个Java进程而不是独立的镜像启动基于Apache Tomcat 的配置
--StartPath启动类的路径_%ORIENTDB_HOME%\bin_
--StopMode和--StartMode类似基于Apache Tomcat 的配置
--StopPath停止类的路径_%ORIENTDB_HOME%\bin_
--Jvm使用的*jvm.dll*:默认的或者全路径指定的这个脚本的第一个参数。确保你已经把java hotspot server放到对应的路径下。我们将使用这个server的版本启动和停止。
--LogPathprunsrv记录日志的路径Apache Commons Daemon日志的默认路径
--Startup表示程序应该由机器启动还是手动自动
prunsrv和prunmgr完整的参数参考,可以访问Procrun page.

接着继续安装服务:

  1. 打开Windows命令行
  2. %ORIENTDB_HOME%\service目录下,例如在命令行中输入> cd D:\orientdb-graphed-1.0rc5\service
  3. 执行installService.bat,指定jvm.dll位置和OrientDB Home的全路径, 例如在命令行中输入> installService.bat "C:\Program Files\Java\jdk1.6.0_26\jre\bin\server\jvm.dll" D:\orientdb-graphed-1.0rc5
  4. 打开Windows服务管理器 - 在任务条上, 点击Start, Control Panel, Administrative ToolsService -确认上面--DisplayName参数指定的名字的服务是否存在(这个例子下就是OrientDB GraphEd 1.0rc5)。 你也可以利用 %ORIENTDB_HOME%\service\OrientDBGraphw.exe去管理和监控OrientDBGraph服务。

其他资源

为了学习更多在其他特殊环境按照OrientDB,请参考一下文档: