欢迎您光临001卡盟,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!

吃鸡挂购买网站 多个平台的 Java Launcher 脚本

吃鸡挂购买网站

通常对于服务来说,过长的命令往往让人感到厌烦,人们需要的只是简单的操作,并且能够支持复杂的功能,对于 Java 开发的服务来说更是如此。

一个比较复杂的 Jar 服务使用java启动,命令如下

java -Xms512m -Xmx512m -jar fuck.jar –config config.server -port 10086

实际上许多虚拟机的语言的 Host 命令格式也是类似的。

我们分析可以知道对于基于虚拟机的语言,命令行基本上是 host vm 运行参数 执行文件路径 输入参数。 当然如果参数较少,我们完全不用写一个 Launcher 脚本来管理服务。

Launcher 脚本需要提供的命令至少有:

startstoprestartstatushelp

##实现 在 Linux 系统上,启动脚本应该是简单的,不许要过多依赖的,一般而言推荐使用 Shell 脚本,实际上很多软件在 Linux 上的 Launcher 都是使用 Shell 语言。android studio,brackets Codebox ,甚至 Chrome,Firefox 都有 shell 脚本的启动器。

在 Windows 上早期,部分软件使用 cmd 来写启动器,然而 cmd 的功能孱弱,微软适时的推出了 PowerShell,PowerShell 在功能上非常强大,甚至要优于Shell,所以采用 PowerShell 来写启动器,并且写一个 cmd 辅助]标签的文章】" target="_blank">辅助脚本启动PowerShell。

@echo offif not exist \”%~dp0launcher.ps1\” goto NotFoundPowerShell -NoProFile -NoLogo -ExecutionPolicy unrestricted -Command \”[System.Threading.Thread]::CurrentThread.CurrentCulture = \’\’; [System.Threading.Thread]::CurrentThread.CurrentUICulture = \’\’;& \’%~dp0launcher.ps1\’ %*\”goto :EOF:NotFoundecho Not Found launcher.ps1 in %~dp0,Please reset your launcherPAUSE

###配置文件的读取 选择合适的配置文件能够简化操作,对于简单的 Shell 脚本而言,复杂的配置文件是难以实现的。我将 Launcher 的配置文件分为两类,一个是 JVM 的参数,也就是上面的 \”-Xms512m -Xmx512m\” 这种文件的格式就是按行读取,行首存在‘#’字符就抛弃。 另一类是基于 ini-Style 的配置文件,主要是 jdk 的路径,需要运行的 jar 包的路径,以及重定向的设置,由于 Windows 和 Linux 的文件系统存在差异,所以在涉及到文件系统的设置迁移到了 Windows 和 Posix 节

Bash 解析 Ini 文件:

function GetPrivateProfileString(){if [ ! -f $1 ] || [ $# -ne 3 ];thenreturn 1fiblockname=$2fieldname=$3begin_block=0end_block=0cat $1 | while read linedoif [ \”X$line\” = \”X[$blockname]\” ];thenbegin_block=1continuefiif [ $begin_block -eq 1 ];thenend_block=$(echo $line | awk \’BEGIN{ret=0} /^[.*]$/{ret=1} END{print ret}\’)if [ $end_block -eq 1 ];then#echo \”end block\”breakfineed_ignore=$(echo $line | awk \’BEGIN{ret=0} /^#/{ret=1} /^$/{ret=1} END{print ret}\’)if [ $need_ignore -eq 1 ];then#echo \”ignored line:\” $linecontinuefifield=$(echo $line | awk -F= \'{gsub(\” |\”,\”\”,$1); print $1}\’)#####Fix Me We Support Space Valuevalue=$(echo $line | awk -F= \'{gsub(\”\”,\”\”,$2); print $2}\’)#echo \”\’$field\’:\’$value\’\”if [ \”X$fieldname\” = \”X$field\” ];then#echo \”result value:\’$result\’\”echo $valuebreakfifidonereturn 0}

PowerShell 解析 Ini 文件:

Function Parser-IniFile{ param( [Parameter(Position=0,Mandatory=$True,HelpMessage=\”Enter Your Ini File Path\”)] [ValidateNotNullorEmpty()] [String]$File ) $ini = @{} $section = \”NO_SECTION\” $ini[$section] = @{} switch -regex -file $File { \”^[(. )]$\” { $section = $matches[1].Trim() $ini[$section] = @{} } \”^s*([^#]. ?)s*=s*(.*)\” { $name,$value = $matches[1..2] # skip comments that start with semicolon: if (!($name.StartsWith(\”;\”))) { $ini[$section][$name] = $value.Trim() } } } $ini}

###JDK 的检测 查看 Java 路径,通常来说,launcher 脚本会从 launcher.cfg 读取Posix(Windows) 节的 JAVA_HOME 键值,如果没有 JAVA_HOME 的变量就读取环境变量的 JAVA_HOME,如果存在 JAVA_HOME,但实际路径上并不存在,或者没有存在 JAVA_HOME,那么再从查找 java的路径。而 JAVA_HOME 的设置可以在有多个JDK的时候仍然正确的选择 JDK.而不用带来冲突。

jdkenv=$(GetPrivateProfileString launcher.cfg Posix JAVA_HOME)javabin=`which java`if [ -f \”$jdkenv/bin/java\” ]; thenjavabin=\”$jdkenv/bin/java\”fi

Get-JavaSE 函数是为了支持从注册表查询 JDK 安装。所以单独的写了一个函数。

Function Get-JavaSE{ $jdk=$env:JAVA_HOME #This is regedit search java return $jdk}$JdkRawEnv=$IniAttr[\”Windows\”][\”JAVA_HOME\”]$JavaEnv=\”$env:JAVA_HOME\”IF($JdkRawEnv 穿越火线透视-eq $null){ $JavaEnv=Get-JavaSE}else{ $JavaEnv=$JdkRawEnv}

###进程的管理 先说 PowerShell,PowerShell 是面向对象的,我们可以轻松的获得进城对象。

我们使用 Start-Process 启动一个进程。在这个 cmdlet 中 我们添加 -PassThru 就可以得到一个进程对象

$ProcessObj= Start-Process -FilePath \”${JavaExe}\” -PassThru -Argumentlist \”${VMOptions} -jar ${PrefixDir}${AppPackage} $Parameters\” -RedirectStandardOutput \”${StdoutFile}\” -RedirectStandardError \”${StdErrorFile}\” -WindowStyle Hidden

$ProcessObj 可以拿到进程的 Id,进程的镜像名,以及进程的资源占用情况。 当然进程对象在 Get-Process 也是可用的。 使用 Get-Process 获得一个进程,如果有进程 id 再好不过。如果不存在 id 对应的进程则会抛出异常

$Obj=Get-Process -Id $javaid

结束一个进程需要 Stop-Process 只需要输入 -Id id 即可。 而对于 Linux,有文件系统 /proc,同样可以实现 PowerShell 的功能。判断进程是否存在可以检测 /proc/id 是否存在,可以检查 /proc/id/status 查看资源占用什么的。

我们在 launcher 脚本所在目录(通常也是 jar 包所在目录)当启动 java 进程成功后,我们将 pid 写入到 launcher.lock.pid 在需要停止和重启的时候使用launcher.lock.pid 存储的 id 来操作即可。 在 PowerShell 中可以用 Get-Content 读取 pid。在 Linux 中可以用 cat。

启动

Windows

launcher -start

Linux

./launcher -start

重启

launcher -restart

停止服务

launcher -restart

卡盟]标签的文章】" target="_blank">卡盟平台看状态:

launcher -status

帮助:

launcher -help

吃鸡挂购买网站 多个平台的 Java Launcher 脚本