我有一个带有很多选项和一些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。
最后我尝试了很多不同的方法:
用空格键没有空格键"作为外部引号和'作为内部引号作为外引号和"是内在的还有更多但是它们都不能以正确的方式转义引号——我总是得到错误!所以我找到的唯一解决方案是:
- 用所有需要的命令创建bash文件
- 在一个命令中运行bash脚本
神庙命令:
command: 'sh my_bash_script >> hbase_test.log 2>&1 && rm my_bash_script'
Bash脚本:
date
echo "describe 'my_table'; exit" | hbase shell
正常运行