39 Star 222 Fork 51

chuanjiao10 / kasini3000

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
u库定时任务_进程级别.ps1 5.89 KB
一键复制 编辑 原始数据 按行查看 历史
chuanjiao10 提交于 2023-08-05 15:07 . 更新:7zip库到23.01
#建议保存编码为:bom头 + utf8
#默认每2小时轮换进程。
#$PSModuleAutoloadingPreference = 0
Start-Sleep -Seconds 1
Remove-Module -Name psreadline
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'
}
$global:被控机列表文件 = $global:u库_进程级别_定时任务_被控机列表文件
$global:zd只读nodelist文件 = $false
& 'zd只读nodelist文件.ps1'
& 'u库定时任务_进程级别_写pid.ps1'
try
{
$log日志文件全目录 = "${global:kasini3000_data_path}"
if (Test-Path -LiteralPath $log日志文件全目录)
{
$u库定时任务的pid文件 = "$log日志文件全目录/u库_进程级别_pid.txt"
if (Test-Path -LiteralPath $u库定时任务的pid文件)
{
$private:文件流 = New-Object System.IO.FileStream($u库定时任务的pid文件,[System.IO.FileMode]::Open,[System.IO.FileAccess]::read,[System.IO.FileShare]::none)
}
}
}
catch
{
Write-Error '错误:u库定时任务,进程级别,文件上锁失败,无法读取!返回码5'
& 'k_写log.ps1' -被写入的log内容 '错误:u库定时任务,进程级别,文件上锁失败,无法读取!返回码5'
exit 5
}
$private:开始时间 = Get-Date
$private:开始时间2 = $private:开始时间.AddSeconds(-$开始时间.second).AddSeconds(-3)
$global:u库_进程级别_定时任务_建立新进程间隔_分钟 = 120
$private:结束时间2 = $private:开始时间2.AddMinutes($global:u_进程级别_定时任务_建立新进程间隔_分钟).AddMinutes(-$private:开始时间.Minute).AddSeconds(-9) #应该小于48秒。
$private:超时时间2 = $private:结束时间2.AddSeconds(${global:u库_进程级别_定时任务_超时}.TotalSeconds)
#main 从59分钟52秒,到59分钟48秒,运行定时任务。
Write-Verbose "信息:u库,进程级别,定时任务进程,【$pid】开始运行。开始时间=【$private:开始时间2】,停止接受任务时间=【$private:结束时间2】,进程强制退出时间=【 $private:超时时间2】"
& 'k_写log.ps1' -被写入的log内容 "信息:u库,进程级别,定时任务进程,【$pid】开始运行。开始时间=【$private:开始时间2】,停止接受任务时间=【$private:结束时间2】,进程强制退出时间=【 $private:超时时间2】"
Write-Error '信息:u库,进程级别,定时任务,开始运行'
$global:u库_进程级别_定时任务_循环中 = $True
while ($global:u库_进程级别_定时任务_循环中 -eq $True)
{
#-----------【运行u库,进程级别,定时任务】-----------
& 'end_invoke_u库_任务表.ps1'
$private:现在 = Get-Date
# 超时6小时,1分钟则直接退出。
if ($private:超时时间2 -lt $private:现在)
{
$private:文件流.Dispose()
& 'u库定时任务_进程级别_删pid文件.ps1'
& 'k_写log.ps1' -被写入的log内容 "错误:u库,进程级别,定时任务进程,【$pid】超时退出。"
Write-Error "错误:u库,进程级别,定时任务进程,【$pid】超时退出。"
exit 1
}
if ( ($private:现在.Minute % 5 -eq 0) -and ($private:现在.Second -gt 51) )
{
Write-Verbose '开始运行 .net 垃圾回收'
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
#egion 检查是否超过并发数
$private:所有运行job = Get-Job | Where-Object { $_.State -eq 'Running' }
if ($private:所有运行job -gt $global:u_进程级别_定时任务_最大并发进程数)
{
if ((Get-Date) -gt $private:u库_定时任务_写日志时间间隔)
{
$private:u库_定时任务_写日志时间间隔 = (Get-Date).AddMinutes(1)
& 'k_写log.ps1' -被写入的log内容 "错误:u库,进程级别,定时任务进程,【$pid】,已运行任务数超出设定最大值。 $private:所有运行job "
}
Write-Error "错误:u库,进程级别,定时任务进程,【$pid】,已运行任务数超出设定最大值。 $private:所有运行job "
continue
}
#endregion 检查是否超过并发数
# 超过结束时间,则不会新建任务,无任务则退出。
if ($private:结束时间2 -lt $private:现在) #$private:结束时间2应该小于51秒。
{
if ((Get-Job).count -le 0)
{
$private:文件流.Dispose()
& 'u库定时任务_进程级别_删pid文件.ps1'
& 'k_写log.ps1' -被写入的log内容 "信息:u库,进程级别,定时任务进程,【$pid】正常结束。"
Write-Error "信息:u库,进程级别,定时任务进程,【$pid】正常结束。"
$global:u库_进程级别_定时任务_循环中 = $false
}
else
{
$private:temp995 = "信息:u库,进程级别,定时任务进程,【$pid】,现有【{0}】个进程" -f (Get-Job).count
& 'k_写log.ps1' -被写入的log内容 $private:temp995
& 'k_写log.ps1' -被写入的log内容 ( (Get-Job).State | Out-String )
Start-Sleep -Seconds 60
}
}
else
{
$private:temp998 = & 'kdir-cmdb.ps1' -被查找的库文件名 'u库_进程级别_计划表_2_任务表.ps1'
if ( ($private:temp998 -eq '输入的库路径有错误') -and ($private:temp998 -eq '无返回') )
{
Write-Error "找不到 'u库_进程级别_计划表_2_任务表.ps1' "
}
else
{
& $private:temp998
}
do
{
Start-Sleep -Seconds 1
$private:现在 = Get-Date
}
while ($private:现在.Second -notin $global:u库_进程级别_定时任务_循环在_秒)
& 'begin_invoke_u库_任务表.ps1'
#-----------【运行k库定时任务】-----------
<#
& 'end_invoke_k库_任务表.ps1'
$private:temp999 = & 'kdir-cmdb.ps1' -被查找的库文件名 'k库_计划表_2_k库_任务表.ps1'
if ( ($private:temp999 -eq '输入的库路径有错误') -and ($private:temp999 -eq '无返回') )
{
Write-Error "找不到 'k库_计划表_2_k库_任务表.ps1' "
}
else
{
& $private:temp999
}
Start-Sleep -Seconds 1
& 'begin_invoke_k库_任务表.ps1'
#>
}
}
exit 0
PowerShell
1
https://gitee.com/chuanjiao10/kasini3000.git
git@gitee.com:chuanjiao10/kasini3000.git
chuanjiao10
kasini3000
kasini3000
master

搜索帮助