繁体   English   中英

任务调度程序 Windows 服务器 2019 - 任务未运行 ONSTART

[英]Task scheduler Windows Server 2019 - Task not running ONSTART

我正在尝试为 gitlab 运行器构建 AWS AMI,以构建我们的 .NET 应用程序。 我正在使用打包器来构建基于官方 Windows Server 2019 基础 AWS AMI 的图像。

我正在使用 WinRM,HTTPS,不更改任何密码。

以下是用于配置虚拟机的 powershell 命令:

"Creating desktop directory"
mkdir C:\Windows\SysWOW64\config\systemprofile\Desktop


"Installing ntrights tools"
mkdir tools
Invoke-WebRequest -Uri "https://download.microsoft.com/download/8/e/c/8ec3a7d8-05b4-440a-a71e-ca3ee25fe057/rktools.exe" -OutFile "tools\tools.exe" -UseBasicParsing

Start-Process "tools\tools.exe" -ArgumentList "/T:$pwd\tools\ /C" -Wait
Start-Process "msiexec.exe" -ArgumentList "/i $pwd\tools\rktools.msi /qn" -Wait

$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

Remove-Item tools -Recurse

"Setting rights of service logon to $Env:WINRMUSER"
ntrights.exe ntrights +r SeServiceLogonRight -u $Env:WINRMUSER

# Git lab runner
$path = ".\gitlab-runner.exe"
If(!(test-path $path)) 
{
    "Downloading Gitlab Runner"
    Invoke-WebRequest -Uri "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-386.exe" -OutFile $path -UseBasicParsing
}

"Scheduling runner to start at startup of the system"
schtasks.exe /create /tn "Gitlab Runner service start" /RU $Env:WINRMUSER /RP `"$Env:WINRMPASS`" /Sc ONSTART /tr "powershell -Command $pwd\register-gitlabrunner.ps1 -ExecutionPolicy Bypass"

执行的脚本显然更多(安装 msbuild,安装 .net sdk 4.7.2,nugget 和 git)如果相关,我可以提供它们。 在这里,我专注于我为 gitlab 跑步者问题提出的 powershell 代码。

我希望虚拟机在启动时启动运行程序,因此我们只需要启动 AMI 实例即可进行扩展。

为了解释更多我所做的尝试:

  • 你可以看到我正在尝试创建桌面目录,以便 windows 让它可以运行交互式的东西......不工作
  • 我正在设置 SeServiceLogonRight 以避免“登录失败”错误
  • 用户为Administrator,密码为正确密码
  • 计划任务已创建并准备好运行。 启动时不会运行,不会运行如果我通过 schtasks /Run 启动它(最后运行时间永远不会更新并在 19XX 中显示值)
  • 尝试 cmd /c 任务命令,一切正常
  • 我在任何地方都找不到任何日志,事件日志似乎没有来自应用程序、系统和 Powershell 的问题。 c:\Windows\Tasks\SchlogU(或类似的文件)中的文件不存在(但文件夹存在)
  • 我没有调度程序的 UI,我使用的是 windows 的轻型版本,所以我所能做的就是玩 schtasks.exe
  • 默认文件夹为:c:\Users\Administrator
  • powershell 脚本由打包程序推送到服务器上,位于 c:\Users\Administrator(与 gitlab-runner.exe 一样)

我直接通过RDP连接尝试调试情况。

这是应该启动的脚本

Set-Location $PSScriptRoot
$path = ".\gitlab-runner.exe"

"Stopping runner"
Invoke-Expression "$path stop"

"Unregistering previous configuration"
Invoke-Expression "$path unregister --all-runners"

"Uninstalling runner"
Invoke-Expression "$path uninstall"

"Installing runner"
Invoke-Expression "$path install"

"Registering Gitlab Runner"
Invoke-Expression "$path register --non-interactive --url 'https://URL_HERE/' --registration-token 'TOKEN HERE' --executor shell"

"Starting the runner"
Invoke-Expression "$path start"

我只能使用用户名和密码在配置中安装一次运行器,但这不是问题,因为任务永远不会运行......

回答我提出的问题谢谢:

到处都有如此多的文档和答案告诉我,当您需要在启动或登录时启动脚本时,任务调度程序是通往 go 的方式。 由于我一直使用带有 GUI 的 windows 服务器,因此任务计划程序到目前为止运行良好。 也许我在某个地方做错了什么,也许不是。

无论如何,在尝试使用 powershell 命令创建任务(有改进但没有足够的解决方案)之后,我尝试将命令文件放入C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp中,也没有工作。

由于此链接,文件看起来像这样

PowerShell -Command "Set-ExecutionPolicy Unrestricted"
PowerShell -Command "c:\Users\Administrator\register-gitlabrunner.ps1" >> c:\startup.log.txt

我试图将脚本的启动延迟到启动后 5 分钟。 是为了测试是否是网络初始化缓慢或其他问题。 还是行不通。

使用此方法在启动时启动脚本时会阻止执行脚本。

从那里我在我的 EC2 启动模板上添加了一个持久的“user_data”脚本,以便启动我所期望的启动。 它有效

我觉得这不是最好的方法,因为我需要配置模板,不仅是 AMI,而且至少它可以工作。

user_data 中的脚本如下所示:

<script>
    cmd /c "C:/ProgramData/Microsoft/Windows/Start Menu/Programs/StartUp/startup.cmd"
</script>
<persist>true</persist>

我在启动脚本中保留了安装和注册,因为当我使用帐户凭据(--user --password)通过 WinRM 安装 gitlab 运行器时出现登录错误

我仍然不明白这个问题是怎么回事。 我猜这是用于启动脚本的帐户的问题(本地系统或类似的东西,这会与 gitlab 运行器服务冲突)。 由于我没有 GUI(文档大多在 GUI 上)并且时间有限,所以我暂时不会进行更多调查,并且觉得至少目前就足够了。

希望这可以帮助遇到相同情况的人

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM