厨师运行sh脚本

时间:2016-06-06 15:54:11

标签: shell chef sh

我在尝试通过Chef运行shell脚本时遇到问题(使用docker-provisioning)。

这就是我尝试执行脚本的方式:

bash 'shell_try' do
   user "root"
   run = "#{some_path_to_script}/my_script.sh some_params"
   code " #{run} > stdout.txt 2> stderr.txt"
end

(请注意,此脚本应运行另一个脚本,进程和写日志)

输出中没有错误,但是当我登录到计算机并且运行ps aux进程未运行时。

我认为权限(或env变量)有问题,因为当我手动尝试相同的命令时 - 它可以工作。

3 个答案:

答案 0 :(得分:1)

bash资源只是直接运行提供的脚本文本,如果您想运行长时间运行的进程,通常会设置Upstart或systemd服务并使用service资源启动它

答案 1 :(得分:1)

最后找到一个解决方案(感谢@coderanger) -

  1. 安装主管:

    • 下载主管食谱
    • 添加: include_recipe' supervisor :: default'
  2. 将我的服务添加到主管:

    supervisor_service" name"做   动作:启用   #action:开始   命令' /path/script.sh start'

  3. 运行主管服务

  4. 全部完成!

答案 2 :(得分:0)

请参阅您的资源的主厨文档:https://docs.chef.io/resource_bash.htmlbash资源不支持run属性。 code属性的文本作为bash脚本运行。除非资源另有说明,否则默认操作是run脚本。

bash 'shell_try' do
  user "root"
  code " #{run} > stdout.txt 2> stderr.txt"
  action :run
end

code属性写入临时文件,然后使用资源中指定的属性运行该属性。

此时此行run = "#{some_path_to_script}/my_script.sh some_params"不执行任何操作。