为什么OpenShift动作钩子脚本会因奇怪的错误而失败?

时间:2014-03-23 23:42:39

标签: openshift

我将一个非盒式磁带操作挂钩(例如post_restart)中的action_hook重命名为特定于磁带盒(例如post_restart_cron),然后遇到了奇怪的新错误,例如:

/var/lib/openshift/${USER}/app-root/runtime/repo/.openshift/action_hooks/post_restart_cron: line 5: `firstcron-secondcron': not a valid identifier

脚本文件post_restart_cron是:

#!/bin/bash

function firstcron-secondcron {
    echo in function
}

1 个答案:

答案 0 :(得分:0)

问题是非特定于盒式磁带的操作挂钩显然在非POSIX模式下运行bash,它允许函数名中的连字符,但特定于磁带盒的操作挂钩在POSIX模式下运行bash,这不允许在函数名中使用连字符。 / p>

为什么特定于磁带盒的操作挂钩在POSIX模式下运行bash?我不是百分百肯定,但我认为会发生以下情况:

  1. v2_cart_model.rb:cartridge_hooks会将挂钩记为source <hook filepath>
  2. v2_cart_model.rb:do_control_with_directory创建一个命令字符串set -e; <path to control script> <action> <other args>; source <hook filepath>
  3. 它可能会将该字符串传递给以{00}模式运行的sh -c,因为它使用source,它会直接读取脚本而不是在新进程中运行它(这将读取{{1}行并运行#!/bin/bash,默认为非POSIX模式)。
  4. /bin/bash中的非盒式磁带特定代码路径必须有不同之处,以避免上述步骤。

    我的解决方案是在我的脚本中使用v2_cart_model.rb来禁用POSIX模式。

    我通过在我的脚本中运行unset POSIXLY_CORRECT命令调试了这个问题,该命令显示了各种bash变量导致我使用了消除过程的调查。