1 Star 0 Fork 52

raingive / kasini3000

forked from chuanjiao10 / kasini3000 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
kaiiit_后台任务_rs.ps1 6.60 KB
一键复制 编辑 原始数据 按行查看 历史
chuanjiao10 提交于 2023-08-05 15:07 . 更新:7zip库到23.01
#建议保存编码为:bom头 + utf8
#$PSModuleAutoloadingPreference = 0
Start-Sleep -Seconds 1
if ( ($IsWindows -eq $True) -or ($PSVersionTable.psversion.major -lt 6) ) #win
{
& 'c:\ProgramData\kasini3000\0k_source.ps1'
}
if ($IsLinux -eq $True)
{
& '/etc/kasini3000/0k_source.ps1'
}
#main
#建立pid文件
& 'kaiiit_写pid_rs.ps1'
try
{
$log日志文件全目录 = "${global:kasini3000_data_path}"
if (Test-Path -LiteralPath $log日志文件全目录)
{
$private:kaiiit_rs_pid文件 = "$log日志文件全目录/kaiiit_pid_rs.txt"
if (Test-Path -LiteralPath $private:kaiiit_rs_pid文件)
{
$private:文件流 = New-Object System.IO.FileStream($private:kaiiit_rs_pid文件,[System.IO.FileMode]::Open,[System.IO.FileAccess]::read,[System.IO.FileShare]::none)
}
}
}
catch
{
Write-Error '错误:kaiiit_rs任务,文件上锁失败,无法读取!返回码5'
exit 5
}
& 'k_写log.ps1' -被写入的log内容 " $pid【kaiiit-rs】开始运行"
Write-Error '信息:k-commit-rs.ps1 后台任务现在开始运行!'
$private:temp991 = Get-Random -InputObject (0..9)
$private:kaiiit_rs任务运行在秒 = @($private:temp991,($private:temp991 + 10),($private:temp991 + 20),($private:temp991 + 30),($private:temp991 + 40),($private:temp991 + 50))
$script:进程内所有任务线程_超时时间 = (Get-Date).AddMinutes(73)
#$script:等待1分钟_2 = (Get-Date).AddMinutes(1)
$global:kaiiit_rs_循环中 = $True
$private:本进程_内的最大线程数_已经超过 = $false
$private:已经fork过新进程 = $false
$private:写日志时间间隔 = Get-Date
while ($global:kaiiit_rs_循环中 -eq $True)
{
& 'end_invoke_福报表_rs.ps1'
#超过1小时13分钟,强制退出。
if ($script:进程内所有任务线程_超时时间 -lt (Get-Date))
{
$private:temp993 = "错误:$pid 超过1小时13分钟,强制退出。 ${private:当前福报数} "
& 'k_写log.ps1' -被写入的log内容 $private:temp993
Write-Error $private:temp993
$private:文件流.Dispose()
& 'kaiiit_删pid_rs.ps1'
$global:kaiiit_rs_循环中 = $false
continue
}
if ($private:已经fork过新进程 -eq $false)
{
$private:temp997 = & 'kdir-cmdb.ps1' -被查找的库文件名 'fb福报库_任务表rs_读取所有正运行任务数179.ps1'
if ( ($private:temp997 -eq '输入的库路径有错误') -and ($private:temp997 -eq '无返回') )
{
Write-Error "找不到 'fb福报库_任务表rs_读取所有正运行任务数179.ps1' "
}
else
{
$private:福报rs库返回值 = & $private:temp997
}
if ($private:福报rs库返回值 -gt $global:kcommitrs最大并发线程数_进程数_乘以_线程数_总和)
{
if ((Get-Date) -gt $private:写日志时间间隔)
{
$private:写日志时间间隔 = (Get-Date).AddMinutes(1)
& 'k_写log.ps1' -被写入的log内容 "错误:$pid 现有福报rs任务数,已经超过最大并发设定值,任务【线程】将被延时启动。 ${private:福报rs库返回值} "
}
Write-Error "错误:$pid 现有福报rs任务数,已经超过最大并发设定值,任务【线程】将被延时启动。 ${private:福报rs库返回值} "
}
else
{
& 'begin_invoke_福报表_rs.ps1'
}
}
$private:当前福报数 = (Get-RSJob).count
if ($private:当前福报数 -gt $global:kcommitrs并发线程数_单进程)
{
$private:本进程_内的最大线程数_已经超过 = $True
}
# 超过线程数,或超时10分钟,则只fork一次新进程。
if ( ($private:本进程_内的最大线程数_已经超过 -eq $True) -and ($private:已经fork过新进程 -eq $false))
{
$private:已经fork过新进程 = $true
$private:temp992 = "信息:{0} 现有rs福报数太多。 {1} 正在轮换kcommitrs进程 " -f $pid,${private:当前福报数}
& 'k_写log.ps1' -被写入的log内容 $private:temp992
Write-Error $private:temp992
$private:文件流.Dispose()
& 'kaiiit_删pid_rs.ps1'
if ($global:kcommitrs_ps版本)
{
if ( ($IsWindows -eq $True) -or ($PSVersionTable.psversion.major -lt 6) ) #win
{
Start-Process -WindowStyle "hidden" -FilePath "$global:kcommitrs_的ps版本" -ArgumentList " -NonInteractive -NoProfile -file ${global:kasini3000目录}/kaiiit_后台任务_rs.ps1"
}
if ($IsLinux -eq $True)
{
$private:linux_process_args = " $global:kcommitrs_的ps版本 -NonInteractive -NoProfile -file ${global:kasini3000目录}/kaiiit_后台任务_rs.ps1 "
Write-Verbose $private:linux_process_args
Start-Process -FilePath '/usr/bin/nohup' -ArgumentList $private:linux_process_args
}
}
else
{
Write-Error "错误:k-commit-rs.ps1中,找不到变量【$global:kcommitrs_的ps版本】,错误码3"
exit 3
}
}
# if ($global:kaiiit后台任务_循环间隔_秒)
# {
# Start-Sleep -Seconds $global:kaiiit后台任务_循环间隔_秒
# }
# else
# {
# Start-Sleep -Seconds 10
# }
do
{
Start-Sleep -Seconds 1
$private:现在 = Get-Date
}
while ($private:现在.Second -notin $private:kaiiit_rs任务运行在秒)
if ($private:当前福报数 -le 0)
{
if ($private:已经fork过新进程 -eq $true)
{
$global:kaiiit_rs_循环中 = $false
$private:temp995 = "{0}【kaiiit-rs】结束运行。本进程已经fork新进程" -f $pid
& 'k_写log.ps1' -被写入的log内容 $private:temp995
Write-Error $private:temp995
}
else
{
if ($script:等待3分钟)
{
if ((Get-Date) -gt $script:等待3分钟)
{
$private:文件流.Dispose()
& 'kaiiit_删pid_rs.ps1'
$global:kaiiit_rs_循环中 = $false
$private:temp995 = "{0}【kaiiit-rs】结束运行。本进程没有fork新进程" -f $pid
& 'k_写log.ps1' -被写入的log内容 $private:temp995
Write-Error $private:temp995
}
}
else
{
$script:等待3分钟 = (Get-Date).AddMinutes(3)
}
}
}
else
{
if ((Get-Date) -gt $script:等待1分钟_2)
{
$script:等待1分钟_2 = (Get-Date).AddMinutes(1)
$private:temp995 = "{0}现有福报rs任务{1}个" -f $pid,$private:当前福报数
& 'k_写log.ps1' -被写入的log内容 $private:temp995
}
#$DebugPreference = 'Continue'
if ($DebugPreference -eq 'Continue')
{
foreach ($i in (Get-RSJob))
{
$private:temp994 = "线程id:{0},完成状态:{1}" -f $i.InstanceID,$i.State
& 'k_写log.ps1' -被写入的log内容 $private:temp994
}
}
if ($script:等待3分钟)
{
Remove-Variable $script:等待3分钟
}
}
$private:现在 = Get-Date
if ( ($private:现在.Minute % 9 -eq 0) -and ($private:现在.Second -gt 51) )
{
Write-Verbose '开始运行 .net 垃圾回收'
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
$private:本进程_内的最大线程数_已经超过 = $True
}
}
exit 0
PowerShell
1
https://gitee.com/raingive/kasini3000.git
git@gitee.com:raingive/kasini3000.git
raingive
kasini3000
kasini3000
master

搜索帮助