加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
kaiiit_后台任务_rs.ps1 4.81 KB
一键复制 编辑 原始数据 按行查看 历史
#建议保存编码为:bom头 + utf8
#
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'
& 'k_写log.ps1' -被写入的log内容 " $pid【kaiiit-rs】开始运行"
Write-Error '信息:k-commit-rs.ps1 后台任务现在开始运行!'
$private:超过此时间则退出 = (Get-Date).AddMinutes(72)
#$script:等待1分钟_2 = (Get-Date).AddMinutes(1)
$global:kaiiit_rs_循环中 = $True
$private:本进程_内的最大线程数_已经超过 = $false
$private:已经fork过新进程 = $false
while ($global:kaiiit_rs_循环中 -eq $True)
{
& 'end_invoke_福报表_rs.ps1'
#超过1小时12分钟,强制退出。
if ($private:超过此时间则退出 -lt (Get-Date))
{
$global:kaiiit_rs_循环中 = $false
}
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最大并发线程数_进程数_乘以_线程数_总和)
{
& 'k_写log.ps1' -被写入的log内容 "错误:$pid 现有福报rs任务数,已经超过最大并发设定值,任务【线程】将被延时启动。 ${private:当前福报数rs} "
}
else
{
& 'begin_invoke_福报表_rs.ps1'
}
}
$private:当前福报数 = (Get-RSJob).count
if ($private:当前福报数 -gt $global:kcommitrs并发线程数_单进程)
{
$private:本进程_内的最大线程数_已经超过 = $True
}
# 超过线程数,则只fork一次新进程。
if ( ($private:本进程_内的最大线程数_已经超过 -eq $True) -and ($private:已经fork过新进程 -eq $false))
{
$private:已经fork过新进程 = $true
& 'k_写log.ps1' -被写入的log内容 "错误:$pid 现有rs福报数太多。 ${private:当前福报数} "
& 'kaiiit_删pid_rs.ps1'
if ($global:kcommitrs_ps版本)
{
if ( ($IsWindows -eq $True) -or ($PSVersionTable.psversion.major -lt 6) ) #win
{
Start-Process -FilePath "$global:kcommitrs_的ps版本" -ArgumentList " -NonInteractive -NoProfile -WindowStyle hidden -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
}
if ($private:当前福报数 -le 0)
{
if ($private:已经fork过新进程 -eq $true)
{
$global:kaiiit_rs_循环中 = $false
$private:temp995 = "{0}【kaiiit-rs】结束运行" -f $pid
& 'k_写log.ps1' -被写入的log内容 $private:temp995
Write-Error '信息:所有 k-commit-rs.ps1 后台任务运行完毕!'
}
else
{
if ($script:等待1分钟)
{
if ((Get-Date) -gt $script:等待1分钟)
{
$global:kaiiit_rs_循环中 = $false
$private:temp995 = "{0}【kaiiit-rs】结束运行" -f $pid
& 'k_写log.ps1' -被写入的log内容 $private:temp995
Write-Error '信息:所有 k-commit-rs.ps1 后台任务运行完毕!'
}
}
else
{
$script:等待1分钟 = (Get-Date).AddMinutes(1)
}
}
}
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:等待1分钟)
{
Remove-Variable $script:等待1分钟
}
}
if ( ($private:现在.Minute % 9 -eq 0) -and ($private:现在.Second -gt 51) )
{
Write-Verbose '开始运行 .net 垃圾回收'
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
$private:本进程_内的最大线程数_已经超过 = $True
}
}
exit 0
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化