531 lines
18 KiB
PowerShell
531 lines
18 KiB
PowerShell
![]() |
#!PowerShell
|
|||
|
|
|||
|
######################################################################
|
|||
|
|
|||
|
# Function
|
|||
|
# CreateTime: 2025-08-06 12:52:28
|
|||
|
# Author: Yue Jiajun
|
|||
|
# Version: 0.0.68
|
|||
|
|
|||
|
# Write-Host 是否输出
|
|||
|
# false: 打包成 exe 时,需要设置为 false
|
|||
|
# true: 直接运行 ps1时,可以为 true
|
|||
|
$outputWriteHost = $true
|
|||
|
$outputLogFile = "$MAIN_PATH\startup.log"
|
|||
|
$outputErrorFile = "$MAIN_PATH\error.log"
|
|||
|
######################################################################
|
|||
|
|
|||
|
# Get current path
|
|||
|
$MAIN_PATH = Get-Location
|
|||
|
|
|||
|
# Get database service name
|
|||
|
$SERVER_NAME = $env:X_MANAGE_DB_SC
|
|||
|
|
|||
|
# Nginx executable name
|
|||
|
$NGINX_EXE = "model-web.exe"
|
|||
|
|
|||
|
|
|||
|
# Log recording function
|
|||
|
function Write-Log {
|
|||
|
param (
|
|||
|
[string]$message
|
|||
|
)
|
|||
|
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
|
|||
|
$logMessage = "[$timestamp] $message"
|
|||
|
# [debug]
|
|||
|
# Write-Output $logMessage | Out-File -FilePath $logFile -Append
|
|||
|
Write-Host $logMessage
|
|||
|
}
|
|||
|
|
|||
|
function randomText {
|
|||
|
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.ToCharArray()
|
|||
|
$length = 12
|
|||
|
$random = New-Object System.Random
|
|||
|
$string = -join (1..$length | ForEach-Object { $chars[$random.Next(0, $chars.Length)] })
|
|||
|
return $string
|
|||
|
}
|
|||
|
|
|||
|
function Import-Script {
|
|||
|
param (
|
|||
|
[string]$dbServer,
|
|||
|
[string]$dbPort,
|
|||
|
[string]$dbUser,
|
|||
|
[string]$dbPassword
|
|||
|
)
|
|||
|
# Check whether the script folder exists in the current path
|
|||
|
if (Test-Path -Path ".\script" -PathType Container) {
|
|||
|
Write-Log "Found script folder, starting to process .."
|
|||
|
|
|||
|
# Get all subfolders
|
|||
|
$subFolders = Get-ChildItem -Path ".\script" -Directory
|
|||
|
|
|||
|
if ($subFolders.Count -eq 0) {
|
|||
|
Write-Log "There are no subfolders in the script folder, skipping processing."
|
|||
|
exit
|
|||
|
}
|
|||
|
|
|||
|
# Traverse each subfolder
|
|||
|
foreach ($folder in $subFolders) {
|
|||
|
Write-Log "Database connection parameters - Please modify according to the actual situation $($folder.Name)"
|
|||
|
|
|||
|
# Get all RAR files under this folder
|
|||
|
$rarFiles = Get-ChildItem -Path $folder.FullName -Filter "*.rar"
|
|||
|
|
|||
|
if ($rarFiles.Count -eq 0) {
|
|||
|
Write-Log "There are no SQL files in the folder $($folder.Name), skipping."
|
|||
|
continue
|
|||
|
}
|
|||
|
|
|||
|
# Process each SQL file
|
|||
|
foreach ($rarFile in $rarFiles) {
|
|||
|
Write-Log "Processing file: $($rarFile.Name) (located in $($folder.Name))"
|
|||
|
|
|||
|
$rarName = $rarFile.BaseName
|
|||
|
$rarDirectoryName = (Get-Item $rarFile.FullName).DirectoryName
|
|||
|
try {
|
|||
|
Start-Process -FilePath "rar" -ArgumentList "x -pshzyh!234 `"$($rarFile.FullName)`" `"$rarDirectoryName`"" -NoNewWindow -Wait
|
|||
|
|
|||
|
# Remove rar-file
|
|||
|
if (Test-Path $rarFile.FullName) {
|
|||
|
Remove-Item $rarFile.FullName -Force
|
|||
|
# [debug]
|
|||
|
# Write-Log "File deleted."
|
|||
|
} else {
|
|||
|
# [debug]
|
|||
|
# Write-Log "File does not exist."
|
|||
|
}
|
|||
|
}
|
|||
|
catch {
|
|||
|
Write-Log "Error unrar $($rarFile.Name):$_"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
# Traverse each subfolder
|
|||
|
foreach ($folder in $subFolders) {
|
|||
|
Write-Log "Database connection parameters - Please modify according to the actual situation $($folder.Name)"
|
|||
|
|
|||
|
# Get all SQL files under this folder
|
|||
|
$sqlFiles = Get-ChildItem -Path $folder.FullName -Filter "*.sql"
|
|||
|
|
|||
|
if ($sqlFiles.Count -eq 0) {
|
|||
|
Write-Log "There are no SQL files in the folder $($folder.Name), skipping."
|
|||
|
continue
|
|||
|
}
|
|||
|
|
|||
|
# Process each SQL file
|
|||
|
foreach ($sqlFile in $sqlFiles) {
|
|||
|
Write-Log "Processing file: $($sqlFile.Name) (located in $($folder.Name))"
|
|||
|
|
|||
|
# Use file name as database name (without extension)
|
|||
|
$dbName = $sqlFile.BaseName
|
|||
|
try {
|
|||
|
# Connect to the database and execute SQL files
|
|||
|
Write-Log "Creating database $dbName and importing $($sqlFile.Name)"
|
|||
|
|
|||
|
# Here we use MySQL client as an example. If it is SQL Server, please modify it to the corresponding command
|
|||
|
# For SQL Server, you can use sqlcmd or Invoke sqlcmd
|
|||
|
# $command = "mysql -h$dbServer -u$dbUser -p$dbPassword -P$dbPort -e 'CREATE DATABASE IF NOT EXISTS $dbName;'"
|
|||
|
# Invoke-Expression $command
|
|||
|
|
|||
|
# $command = "mysql -h$dbServer -u$dbUser -p$dbPassword -P$dbPort $dbName `< `"$($sqlFile.FullName)`""
|
|||
|
$command = "mysql -h$dbServer -u$dbUser -p$dbPassword -P$dbPort $($folder.Name) `< `"$($sqlFile.FullName)`""
|
|||
|
|
|||
|
# [debug]
|
|||
|
# Write-Log $command
|
|||
|
|
|||
|
# Invoke-Expression $command # ERROR
|
|||
|
# cmd /c $command # SUCCESS, WARN: >> CategoryInfo: NotSpecified: (mysql: [Warning...an be insecure.:String) [], RemoteException
|
|||
|
# Get-Content $sqlFile.FullName | Invoke-Expression $command # ERROR
|
|||
|
Start-Process -FilePath "mysql" -ArgumentList "-h$dbServer -u$dbUser -p$dbPassword -P$dbPort $($folder.Name)" -RedirectStandardInput $sqlFile.FullName -NoNewWindow -Wait
|
|||
|
|
|||
|
# Write-Log "Successfully imported $($sqlFile.Name) into database $dbName"
|
|||
|
Write-Log "Successfully imported $($sqlFile.Name) into database $($folder.Name)"
|
|||
|
|
|||
|
$date = $(Get-Date -Format "yyyy-MM-dd")
|
|||
|
$random = randomText
|
|||
|
$target = ".\patch\$($date)"
|
|||
|
New-Item -Path "$target" -ItemType Directory -Force
|
|||
|
# cmd /c rar a -pPassword -hp "target.rar" "file"
|
|||
|
# Start-Process -FilePath "rar" -ArgumentList "a -pPassword -hp "target.rar" "file"" -NoNewWindow -Wait
|
|||
|
# Start-Process -FilePath "rar" -ArgumentList 'a', '-pPassword', '-hpPassword', 'target.rar', 'file' -NoNewWindow -Wait
|
|||
|
Start-Process -FilePath "rar" -ArgumentList "a -pPassword#20250810! -hp $target\$($random).rar `"$($sqlFile.FullName)`"" -NoNewWindow -Wait
|
|||
|
|
|||
|
# Remove script-file
|
|||
|
if (Test-Path $sqlFile.FullName) {
|
|||
|
Remove-Item $sqlFile.FullName -Force
|
|||
|
# [debug]
|
|||
|
# Write-Log "File deleted."
|
|||
|
} else {
|
|||
|
# [debug]
|
|||
|
# Write-Log "File does not exist."
|
|||
|
}
|
|||
|
}
|
|||
|
catch {
|
|||
|
Write-Log "Error importing $($sqlFile.Name):$_"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Write-Log "All script processing has been completed."
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function Append-Utf8NoBomContent {
|
|||
|
param (
|
|||
|
[Parameter(Mandatory=$true)]
|
|||
|
[string]$FilePath,
|
|||
|
|
|||
|
[Parameter(Mandatory=$true)]
|
|||
|
[string]$Content
|
|||
|
)
|
|||
|
|
|||
|
# 确保目录存在,如果不存在则创建
|
|||
|
$directory = [System.IO.Path]::GetDirectoryName($FilePath)
|
|||
|
if (-not [System.IO.Directory]::Exists($directory)) {
|
|||
|
New-Item -ItemType Directory -Path $directory -Force | Out-Null
|
|||
|
}
|
|||
|
|
|||
|
# 使用 UTF-8(无 BOM)追加内容
|
|||
|
# 需要PowerShell 6+
|
|||
|
# $Content | Out-File -FilePath $FilePath -Append -Encoding utf8NoBOM
|
|||
|
|
|||
|
# 检查文件是否存在,如果不存在则先创建一个空文件(避免 BOM 问题)
|
|||
|
if (-not (Test-Path -Path $FilePath)) {
|
|||
|
# 使用 .NET 创建空文件(无 BOM)
|
|||
|
[System.IO.File]::WriteAllText($FilePath, "", [System.Text.Encoding]::UTF8)
|
|||
|
}
|
|||
|
|
|||
|
# 使用 .NET 方法追加内容(UTF-8 无 BOM)
|
|||
|
[System.IO.File]::AppendAllText($FilePath, "$Content`r`n", [System.Text.Encoding]::UTF8)
|
|||
|
}
|
|||
|
|
|||
|
function Go-Home {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host ""
|
|||
|
Write-Host "Exit ..."
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 任务执行完成"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
Start-Sleep -Seconds 5
|
|||
|
exit 0
|
|||
|
}
|
|||
|
|
|||
|
function Usage-MySQL {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "ERROR: Please configure value in the system environment variable."
|
|||
|
Write-Host "env: - X_MANAGE_DB_EXE"
|
|||
|
Write-Host " - X_MANAGE_DB_COF"
|
|||
|
Write-Host "skip database"
|
|||
|
Write-Host ""
|
|||
|
}
|
|||
|
pause
|
|||
|
Go-Home
|
|||
|
}
|
|||
|
|
|||
|
function Usage-SpringBoot {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "ERROR: Please configure `"JDK_21`" in the system environment variable."
|
|||
|
}
|
|||
|
pause
|
|||
|
Go-Home
|
|||
|
}
|
|||
|
|
|||
|
function Install-MySQL-Server {
|
|||
|
# Check required environment variables
|
|||
|
if (-not $env:X_MANAGE_DB_EXE) {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "Error: Missing parameter! {X_MANAGE_DB_EXE}" | Out-File "error.log" -Append
|
|||
|
}
|
|||
|
Usage-MySQL
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if (-not (Test-Path $env:X_MANAGE_DB_EXE)) {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "Error: Missing parameter! {X_MANAGE_DB_EXE}" | Out-File "error.log" -Append
|
|||
|
}
|
|||
|
Usage-MySQL
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
Write-Host "exe: $($env:X_MANAGE_DB_EXE)"
|
|||
|
$DB_EXEC = $env:X_MANAGE_DB_EXE
|
|||
|
|
|||
|
if (-not $env:X_MANAGE_DB_COF) {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "Error: Missing parameter! {X_MANAGE_DB_COF}" | Out-File "error.log" -Append
|
|||
|
}
|
|||
|
Usage-MySQL
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if (-not (Test-Path $env:X_MANAGE_DB_COF)) {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "Error: Missing parameter! {X_MANAGE_DB_COF}" | Out-File "error.log" -Append
|
|||
|
}
|
|||
|
Usage-MySQL
|
|||
|
return
|
|||
|
}
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "ini: $($env:X_MANAGE_DB_COF)"
|
|||
|
}
|
|||
|
$DB_CONF = $env:X_MANAGE_DB_COF
|
|||
|
|
|||
|
# Install MySQL service
|
|||
|
& $DB_EXEC --install $SERVER_NAME --defaults-file="$DB_CONF"
|
|||
|
|
|||
|
# Configure service to start automatically
|
|||
|
sc.exe config $SERVER_NAME start= auto
|
|||
|
|
|||
|
# Wait for service registration
|
|||
|
Start-Sleep -Seconds 1
|
|||
|
|
|||
|
# Start the service
|
|||
|
Start-Service -Name $SERVER_NAME
|
|||
|
|
|||
|
# Wait for service to start
|
|||
|
Start-Sleep -Seconds 1
|
|||
|
}
|
|||
|
|
|||
|
function Check-With-Start-MySQL {
|
|||
|
# Check if service exists
|
|||
|
$service = Get-Service -Name $SERVER_NAME -ErrorAction SilentlyContinue
|
|||
|
|
|||
|
if ($service) {
|
|||
|
# Service exists, check if running
|
|||
|
if ($service.Status -eq "Running") {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "database ok."
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 数据已运行..."
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
} else {
|
|||
|
# Start the service if not running
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "start up ..."
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 启动数据库中..."
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
Start-Service -Name $SERVER_NAME
|
|||
|
}
|
|||
|
} else {
|
|||
|
# Install MySQL service
|
|||
|
Install-MySQL-Server
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function Check-Web {
|
|||
|
# 检查
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
function Check-SpringBoot {
|
|||
|
# 检查 JDK_21 环境变量
|
|||
|
if (-not $env:JDK_21) {
|
|||
|
# 如果不存在,则检查安装目录下是否存在 java 可执行文件
|
|||
|
if (Test-Path "$MAIN_PATH\jre\bin\java.exe") {
|
|||
|
$env:JDK_21 = "$MAIN_PATH\jre"
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "ONESELF"
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - JDK_21 环境变量不存在,默认生效: $env:JDK_21"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (-not $env:JDK_21) {
|
|||
|
Usage-SpringBoot
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
# 检查连接 DB 的 IP 地址
|
|||
|
if (-not $env:MODEL_MANAGE_DB_SERVER) {
|
|||
|
# 不存在,则默认 127
|
|||
|
$env:MODEL_MANAGE_DB_SERVER = "127.0.0.1"
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - MODEL_MANAGE_DB_SERVER 环境变量不存在,默认生效: $env:MODEL_MANAGE_DB_SERVER"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
}
|
|||
|
|
|||
|
# 检查连接 DB 的端口号
|
|||
|
if (-not $env:MODEL_MANAGE_DB_PORT) {
|
|||
|
# 不存在,则默认 3306
|
|||
|
$env:MODEL_MANAGE_DB_PORT = "3306"
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - MODEL_MANAGE_DB_PORT 环境变量不存在,默认生效: $env:MODEL_MANAGE_DB_PORT"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
}
|
|||
|
|
|||
|
# 检查 SpringBoot 启动 jar 文件环境变量
|
|||
|
if (-not $env:MODEL_MANAGE_BIN) {
|
|||
|
# 不存在,则默认安装目录下 bin
|
|||
|
$env:MODEL_MANAGE_BIN = "$MAIN_PATH\bin\demo-0.0.1.jar"
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - MODEL_MANAGE_BIN 环境变量不存在,默认生效: $env:MODEL_MANAGE_BIN"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
if (-not $env:MODEL_MANAGE_BIN) {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "ERROR: Missing executable jar"
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 缺少可执行的 jar"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
pause
|
|||
|
Go-Home
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "jdk ok."
|
|||
|
Write-Host ""
|
|||
|
}
|
|||
|
Start-Sleep -Seconds 1
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
function Start-Web {
|
|||
|
|
|||
|
# 进入 web 下
|
|||
|
Set-Location "$MAIN_PATH\web"
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "Start Web ..."
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 准备Web启动..."
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
|
|||
|
# Kill existing web service processes
|
|||
|
Get-Process -Name $NGINX_EXE.Replace(".exe", "") -ErrorAction SilentlyContinue | Stop-Process -Force
|
|||
|
|
|||
|
# 配置默认启动参数
|
|||
|
$NGINX_PATH = $NGINX_EXE
|
|||
|
if (-not $NGINX_PATH) {
|
|||
|
# 不存在,则默认安装目录下 nginx.exe
|
|||
|
# $NGINX_PATH = "$MAIN_PATH\nginx.exe"
|
|||
|
$NGINX_PATH = "nginx.exe"
|
|||
|
if (-not $NGINX_PATH) {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "ERROR: Missing executable web."
|
|||
|
}
|
|||
|
pause
|
|||
|
Go-Home
|
|||
|
}
|
|||
|
}
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "$NGINX_PATH"
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - Web生效可执行器: $NGINX_PATH"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
|
|||
|
# 检查 Nginx 配置文件是否存在,优先使用 web.conf
|
|||
|
# $NGINX_CONFIG = "$MAIN_PATH\conf\web.conf"
|
|||
|
$NGINX_CONFIG = "conf\web.conf"
|
|||
|
if (-not $NGINX_CONFIG) {
|
|||
|
# 不存在,则默认安装目录下 nginx.conf
|
|||
|
# $NGINX_CONFIG = "$MAIN_PATH\conf\nginx.conf"
|
|||
|
$NGINX_CONFIG = "conf\nginx.conf"
|
|||
|
if (-not $NGINX_CONFIG) {
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "ERROR: Missing web config"
|
|||
|
}
|
|||
|
pause
|
|||
|
Go-Home
|
|||
|
}
|
|||
|
}
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "$NGINX_CONFIG"
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - Web配置生效文件: $NGINX_CONFIG"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
|
|||
|
# 创建以管理员身份运行的 VBS脚本(类似于原始的批处理方式)
|
|||
|
$vbsContent = @"
|
|||
|
Set UAC = CreateObject("Shell.Application")
|
|||
|
Set WshShell = CreateObject("WScript.Shell")
|
|||
|
|
|||
|
On Error Resume Next
|
|||
|
Set fso = CreateObject("Scripting.FileSystemObject")
|
|||
|
Set tempFile = fso.OpenTextFile("%SystemRoot%\System32\config\systemprofile", 1)
|
|||
|
If Err.Number = 0 Then
|
|||
|
WshShell.Run "$NGINX_PATH -c $NGINX_CONFIG", 0, False
|
|||
|
Else
|
|||
|
UAC.ShellExecute "$NGINX_PATH", "-c $NGINX_CONFIG", "", "runas", 0
|
|||
|
End If
|
|||
|
"@
|
|||
|
|
|||
|
# 以 UTF-8 写入文件 temp.vbs ,vbs 脚本不能使用 utf-8
|
|||
|
# $vbsContent | Out-File -FilePath "$MAIN_PATH\web\temp.vbs" -Encoding UTF8
|
|||
|
# 以 ANSI 写入文件 temp.vbs
|
|||
|
$vbsContent | Out-File -FilePath "$MAIN_PATH\web\temp.vbs" -Encoding ASCII
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "Build temporary startup script web."
|
|||
|
}
|
|||
|
|
|||
|
# 运行 vbs 并等待结束
|
|||
|
# Start-Process "cscript.exe" -ArgumentList "//nologo temp.vbs" -Wait
|
|||
|
|
|||
|
# 不等待,执行下一条命令,Nginx 本身是持续性窗口,等待会导致阻塞
|
|||
|
Start-Process "cscript.exe" -ArgumentList "//nologo temp.vbs"
|
|||
|
|
|||
|
# 等待1秒后(防止上一条执行慢),删除临时文件
|
|||
|
Start-Sleep -Seconds 1
|
|||
|
Remove-Item "temp.vbs" -Force
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
function Start-SpringBoot {
|
|||
|
|
|||
|
# 准备启动后台服务
|
|||
|
Set-Location $MAIN_PATH
|
|||
|
if($outputWriteHost) {
|
|||
|
Write-Host "Start Server ..."
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 准备SpringBoot启动..."
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
|
|||
|
# jvm启动参数
|
|||
|
# 指定环境变量 MODEL_MANAGE_DB_SERVER
|
|||
|
# 指定环境变量 MODEL_MANAGE_DB_PORT
|
|||
|
# 追加自定义JVM参数 MODEL_VM_PARAMS
|
|||
|
$arguments = "-Dspring.profiles.active=dev,mysql -Dmybatis-flex.datasource.ds1.password=Wfbke8!LeMY5Fwwe -Dproject.database-ip=$env:MODEL_MANAGE_DB_SERVER -Dproject.database-port=$env:MODEL_MANAGE_DB_PORT $env:MODEL_VM_PARAMS"
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 启动JVM参数: $arguments"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
|
|||
|
# 拆分参数为数组
|
|||
|
$argumentList = $arguments -split " -"
|
|||
|
|
|||
|
# 处理第一个元素(没有前导"-")和其余元素(添加前导"-")
|
|||
|
$argumentList = @($argumentList[0]) + ($argumentList[1..($argumentList.Length-1)] | ForEach-Object { "-$_" })
|
|||
|
|
|||
|
# 构建最终的调用命令
|
|||
|
if($outputWriteHost) {
|
|||
|
# Write-Host "$($env:JDK_21)\bin\java.exe" $argumentList -jar "$env:MODEL_MANAGE_BIN"
|
|||
|
}
|
|||
|
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - 启动完整命令: $($env:JDK_21)\bin\java.exe $argumentList -jar $env:MODEL_MANAGE_BIN"
|
|||
|
Append-Utf8NoBomContent -FilePath $outputLogFile -Content $logMessage
|
|||
|
|
|||
|
# 启动 SpringBoot
|
|||
|
& "$($env:JDK_21)\bin\java.exe" $argumentList -jar "$env:MODEL_MANAGE_BIN"
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
# 检查并启动 MySQL 数据库
|
|||
|
Check-With-Start-MySQL
|
|||
|
|
|||
|
Start-Sleep -Seconds 2
|
|||
|
# 导入数据
|
|||
|
Import-Script "127.0.0.1" "33306" "root" "Root@2025"
|
|||
|
|
|||
|
Start-Sleep -Seconds 1
|
|||
|
# 检查 Web 运行环境
|
|||
|
Check-Web
|
|||
|
# 启动 Nginx 服务
|
|||
|
Start-Web
|
|||
|
|
|||
|
Start-Sleep -Seconds 1
|
|||
|
# 检查 SpringBoot 运行环境
|
|||
|
Check-SpringBoot
|
|||
|
# 启动 SpringBoot 服务
|
|||
|
Start-SpringBoot
|
|||
|
|
|||
|
Write-Host "已启动模型"
|
|||
|
Start-Sleep -Seconds 3
|