【问题标题】:Error in puppet : File[...] doesn't seem to be in the catalogpuppet 中的错误:文件 [...] 似乎不在目录中
【发布时间】:2016-07-04 07:49:07
【问题描述】:

我想通过 puppet 添加连续的 cron,第一个设置为每 10 分钟一次,第二个在周日晚上 7:00 运行。

puppet 中的第一个 cron 工作正常,但第二个显示以下错误: “错误:无法从远程服务器检索目录:服务器上的错误 400:无效关系:Cron[notifyinactivetargetweekly] { require => File[...weeklynotifyinactivejob.sh] },因为 File[...weeklynotifyinactivejob.sh] 没有t 似乎在目录中 警告:不在失败的目录上使用缓存 错误:无法检索目录;跳过跑步”

以下是清单代码。

cron { 'firstcron':
    command => "${scmphptpl::DocRootDir}/firstcron.sh ${scmphptpl::Environment} ${scmphptpl::DocRootDir}",
    require => File["${scmdemophp::DocRootDir}/firstcron.sh"],
    minute  => '*/10',
    environment=>["COMPOSER_HOME=${scmphptpl::DocRootDir}",
                    "SYMFONY_ENV=${scmphptpl::Environment}",
                    "SYMFONY_DEBUG=${scmphptpl::Debug}",
                    "PATH=/opt/rh/php55/root/usr/bin:/opt/rh/php55/root/usr/sbin:/usr/local/sbin:/usr/local/bin:/sbin/:/bin/:/usr/sbin/:/usr/bin/"
                ],

}->
cron { 'weeklynotifyinactivejob':
    command => "${scmphptpl::DocRootDir}/weeklynotifyinactivejob.sh ${scmphptpl::Environment} ${scmphptpl::DocRootDir}",
    require => File["${scmphptpl::DocRootDir}/weeklynotifyinactivejob.sh"],
    minute  => '00',
    hour  => '19',
    weekday  => 'Sunday',
    environment=>["COMPOSER_HOME=${scmphptpl::DocRootDir}",
                    "SYMFONY_ENV=${scmphptpl::Environment}",
                    "SYMFONY_DEBUG=${scmphptpl::Debug}",
                    "PATH=/opt/rh/php55/root/usr/bin:/opt/rh/php55/root/usr/sbin:/usr/local/sbin:/usr/local/bin:/sbin/:/bin/:/usr/sbin/:/usr/bin/"
                ],

}->

hieradata 包含以下类加载:

classes:
  - scmphptpl::myprojectdeploy

myprojectdeploy 的 init.pp 包含:

class scmphptpl {
    $DocRootDir = "/app/code"

我检查了文件“/app/code/weeklynotifyinactivejob.sh”是否存在。

更新:

我创建了相同的,但由于某种原因,cron 没有按时间运行:

file { "${DocRootDir}/weeklynotifyinactivejob.sh":
  ensure  => file,
  content => "... whatever's in the file, or use a template/source ...",
}->
cron { 'notifyinactivetargetweekly':
    command => "${scmphptpl::DocRootDir}/weeklynotifyinactivejob.sh ${scmphptpl::Environment} ${scmphptpl::DocRootDir}",
    require => File["${scmdemophp::DocRootDir}/weeklynotifyinactivejob.sh"],
    minute  => '*/15',
    environment=>["COMPOSER_HOME=${scmphptpl::DocRootDir}",
                    "SYMFONY_ENV=${scmphptpl::Environment}",
                    "SYMFONY_DEBUG=${scmphptpl::Debug}",
                    "PATH=/opt/rh/php55/root/usr/bin:/opt/rh/php55/root/usr/sbin:/usr/local/sbin:/usr/local/bin:/sbin/:/bin/:/usr/sbin/:/usr/bin/"
                ],

}

但 15 分钟后无法运行,需要帮助

  1. 傀儡日志说: 文件[/app/code/edlconsole/firstcron.sh]/mode:模式将'0664'改为'0751'
  2. 但它没有显示相同的 文件[/app/code/edlconsole/weeklynotifyinactivejob.sh]/mode:模式将'0664'更改为'0751'
  3. 频率变化正在反映出来

【问题讨论】:

  • 您的代码 sn-p 未显示 Puppet 报告的文件丢失。你的清单中真的有它吗?如果是这样,请将其包含在问题中。如果它在另一个类中,则显示它的布局方式。
  • hieradata 包含类加载: classes: - scmdemophp::edsconsoledeploy init.pp 包含: class scmdemophp { $DocRootDir = "/app/code/" 我已经验证了文件:/app /code/notifyinactivetargetweekly.sh 存在。

标签: cron puppet manifest


【解决方案1】:

使用requirebeforesubscribenotify 参数表示资源与文件或其他资源相关必须包含有效引用。

您使用的require 参数需要在您的Puppet 清单中定义的特定文件resource,不一定是服务器本身上的文件。这就是文件不在目录中的意思(目录是根据清单构建的)。

require => File["${scmdemophp::DocRootDir}/notifyinactivetargetweekly.sh"],

这意味着必须在清单中定义一个名为 /app/code/notifyinactivetargetweekly.sh 的文件资源,例如在 scmdemophp 类中你可以有:

file { "${DocRootDir}/notifyinactivetargetweekly.sh":
  ensure  => file,
  content => "... whatever's in the file, or use a template/source ...",
}

然后require的依赖就可以解决了。

如果您不希望使用 Puppet 管理文件,则只需将 require 参数省略即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2015-12-04
    • 2014-07-31
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多