【问题标题】:Puppet not executing command. Getting stuck and giving timeout人偶不执行命令。卡住并超时
【发布时间】:2018-07-10 17:13:10
【问题描述】:
exec { "stop old application instance":
    cwd => "${install_dir}",
    path => ['/usr/bin','/bin','/usr/sbin','/sbin', '/bin/unlink', '/usr/local', '/usr/local/bin/'],
    onlyif => "test -e '${install_dir}/${app_package_dir}/processes.json'",
    group => 0,
    user => 'root',
    command => "pm2 delete /var/lib/application_folder/processes.json"
} 

Puppet 卡在这里,无法执行命令。不明白原因。错误日志如下所示

Error: Command exceeded timeout
Wrapped exception:
execution expired
Error: /Stage[main]/application::Install/Exec[stop old application instance]/returns: change from notrun to 0 failed: Command exceeded timeout

任何帮助将不胜感激。

【问题讨论】:

  • --debug 模式下运行应该会为您提供有关正在发生的事情的更多详细信息。

标签: linux puppet pm2


【解决方案1】:

https://ask.puppet.com/question/1308/command-exceeded-timeout/

Puppet 默认要求您的命令在 300 秒或更短的时间内完成运行。然后它放弃等待并假设命令失败。

我对 pm2 一无所知,无法帮助您弄清楚为什么您的命令需要这么长时间。但如果这是正常的,那么上面的链接建议你添加

timeout => 1800,

到你的傀儡定义。

【讨论】:

  • 感谢回复,但这不是超时问题。 Puppet 没有得到 pm2 命令。我尝试过超时 0。
  • @MustafaMamun,从日志摘录中,它确实 看起来 好像 Puppet 正在尝试执行命令。
【解决方案2】:

我建议手动查找pm2 命令的来源($ which pm2),然后使用命令的整个路径而不是使用path 属性。像这样的:

exec { "stop old application instance":
    cwd => "${install_dir}",
    onlyif => "test -e '${install_dir}/${app_package_dir}/processes.json'",
    user => 'root',
    command => "/usr/bin/pm2 delete /var/lib/application_folder/processes.json",
    logoutput => 'onfailure',
}

请注意logoutput 属性,以便仅在出现问题时查看命令的输出。我认为您不需要指定组

【讨论】:

    【解决方案3】:

    您可以尝试在您的 puppet 全局脚本文件中放入以下内容:

    Exec {
    timeout => 0,
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多