仅当执行成功时才从执行人员发出通知

问题描述 投票:0回答:1

我目前正在学习木偶,我正在尝试拥有一个

exec
,它将通知另一个执行人员,但前提是第一个执行人员成功。然而目前我正在努力弄清楚如何做到这一点。现在我有:

  exec { 'first command':
    command => "some command"
    path => '/usr/bin',
    notify  => Exec["second command"],
  }

  exec { 'second command':
    command => "run another command if first command was succesfull",
    path    => '/usr/bin',
    refreshonly => true,
  }

如何修改,以便仅在第一个命令成功时才运行第二个命令,因为当前无论第一个命令之后发生什么,它都会运行?

puppet
1个回答
0
投票

是的,这正是它应该如何工作的。以下代码将创建 2 个文件,

/tmp/foo
,然后是
/tmp/bar
:

Exec {
  path => '/usr/bin',
}

exec {'foo':
  command => 'touch /tmp/foo',
  notify  => Exec["bar"],
}

exec {'bar':
  command     => 'touch /tmp/bar',
  refreshonly => true,
}

将其另存为文件并应用:

$ puppet apply exec.pp 
Notice: /Stage[main]/Main/Exec[foo]/returns: executed successfully
Notice: /Stage[main]/Main/Exec[bar]: Triggered 'refresh' from 1 event

两个

exec
都会运行每个木偶运行,这通常是不受欢迎的行为。

您可以通过在运行第一个 exec 之前添加条件来改进它

exec {'foo':
  command => 'touch /tmp/foo',
  unless  => 'test -f /tmp/foo',
  notify  => Exec["bar"],
}

这将检查

/tmp/foo
是否存在,如果删除
/tmp/bar
,它将不会再次创建,因为代码仅检查
/tmp/foo
文件是否存在。

© www.soinside.com 2019 - 2024. All rights reserved.