在hiera (Puppet) yaml中用于cronjob的几个命令在一行中



我有一个带有很多选项和一些cronjob的hieradata yaml文件我想再添加一个cronjob,其中包含几个带引号的bash命令:

hbase_test:
cron: '*/5 * * * *'
user: 'root'
command: '(date && echo "describe 'my_table'; exit" | hbase shell) >> hbase_test.log 2>&1;'
flock: true

但这不起作用- puppet无法加载这样的yaml。我还试了下一个方法:

command: "(date && echo "describe 'my_table'; exit" | hbase shell) >> hbase_test.log 2>&1;"

Puppet是ok的,hbase启动成功,但是失败:

describe my_table; exit
NameError: undefined local variable or method `my_table' for #<Object:0xf9f041c>

正确的命令必须是:

describe 'my_table'; exit

我丢了引号!我不知道如何以正确的方式摆脱它们。我也试过

command:>
(date && echo "describe 'my_table'; exit" | hbase shell) >> hbase_test.log 2>&1;

但是cron没有启动

您需要在您的:>之间留出空间。这就是你想要的:

command: >
(date && echo "describe 'my_table'; exit" | hbase shell) >> hbase_test.log 2>&1;

您可以在这里看到如何将YAML解析为JSON。

最后我尝试了很多不同的方法:

用空格键

没有空格键"作为外部引号和'作为内部引号作为外引号和"是内在的还有更多但是它们都不能以正确的方式转义引号——我总是得到错误!所以我找到的唯一解决方案是:

  1. 用所有需要的命令创建bash文件
  2. 在一个命令中运行bash脚本

神庙命令:

command: 'sh my_bash_script >> hbase_test.log 2>&1 && rm my_bash_script'

Bash脚本:

date
echo "describe 'my_table'; exit" | hbase shell

正常运行

最新更新