[英]Script not running from task scheduler on Windows Server 2012 R2
[英]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 实例即可进行扩展。
为了解释更多我所做的尝试:
我直接通过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.