【问题标题】:STOP / TERMINATE / CLOSE / KILL / ERROR OUT batch job from Ruby script停止/终止/关闭/杀死/错误 Ruby 脚本中的批处理作业
【发布时间】:2019-01-17 02:57:36
【问题描述】:

我访问了this页面,但没有成功尝试这些解决方案。

我在 Windows 10 上运行。我有这个用于 Arachni 安全扫描程序的批处理 (cmd.exe) 文件:

arachni ^
--audit-forms ^
--audit-jsons ^
--audit-links ^
--audit-ui-forms ^
--audit-ui-inputs ^
--audit-xmls ^
--browser-cluster-ignore-images ^
--browser-cluster-job-timeout=90 ^
--browser-cluster-pool-size=3 ^
--checks=trainer ^
--http-request-queue-size=100 ^
--http-request-redirect-limit=3 ^
--http-request-timeout=30000 ^
--http-response-max-size=500000 ^
--http-user-agent="PhantomJS / arachni v1.5.1-0.5.12-windows-x86_64" ^
--plugin=login_script:script=%~dp0\LoginScript.rb ^
https://www.example.com

登录脚本上面批处理脚本的倒数第二行)帮助我登录到应用程序并开始扫描。部分登录脚本(.rb 扩展名)如下所示:

begin
browser.text_field(:id => 'myTextField').wait_until_present(60)
puts 'User successfully lands on MyWebSite home page with the URL ' + browser.url
rescue
puts 'Even after 60 seconds of waiting still unable to reach MyWebSite home page'
exit
end

从救援语句中可以看出,如果找不到某个元素(简而言之,Watir WebDriver),我将尝试终止/关闭/完成/终止整个批处理作业。我可以清楚地看到 即使等待 60 秒后仍然无法访问 MyWebSite 主页消息显示在控制台中,这意味着救援语句被执行,但在那之后扫描只是继续进一步,因为没有任何尝试停止它。以下是我尝试使用的不同变体,而不是 exit 声明:

  1. 退出 1
  2. abort('中止扫描')
  3. 引发 RuntimeError, 'Aborting the scan'
  4. 系统('退出')

他们都没有在我的情况下工作......

这是否可以从 Ruby 脚本中停止扫描(字面意思是批处理作业)?

【问题讨论】:

  • 你的代码都不是我能说的 Windows 批处理文件。
  • @Squashman 添加了屏幕截图以进行澄清。登录脚本是 Ruby .rb 文件,我只是将其中的一部分粘贴到问题中。但是这个脚本是从批处理作业中调用的
  • 您仅使用exit 退出登录脚本。如果你用browser.quit 退出整个浏览器会发生什么?
  • @Casper 是的,browser.quit 将在这种特定情况下工作,但我宁愿在 Ruby 世界中寻找更通用的解决方案....
  • 我看了Arachni的源码,实在是没办法了。 Arachni 甚至不会检查登录脚本的退出代码。这甚至可能值得向开发人员提出一个错误问题。但无论如何,这更像是 Arachni 代码中的后勤问题,而不是 Ruby 问题。

标签: ruby batch-file cmd stderr


【解决方案1】:

我不确定我的问题是否正确,但值得一试。在 Windows 10 上尝试过,它在退出脚本之前成功杀死了任何其他正在运行的进程。

begin   
    fail #lets test fail    
    puts 'User successfully lands on MyWebSite home page with the URL ' + browser.url
rescue
    puts 'Even after 60 seconds of waiting still unable to reach MyWebSite home page'

    success = `Taskkill /IM batch_name.bat /F`
    puts "Killed: #{success}"

    exit #not neccessery?
end

我假设您也可以通过任务列表获取批处理 pid,然后通过 /PID 将其杀死,如下面的链接所述。

`Taskkill /PID 26356 /F`

https://tweaks.com/windows/39559/kill-processes-from-command-prompt/

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 2022-01-24
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多