如何将多个命令传递给 salt cmd.run?

How to pass multiple commands into salt cmd.run?

我需要执行一个带有属性文件的脚本,这在服务器上要求我位于脚本和属性文件的目录中。如何在不让 salt 执行另一个负责目录更改的脚本的情况下获取 salt 来实现此目的?

我试过了

salt 'minion_id' cmd.run 'cd /my/directory && sh my_script.sh my_file.properties' 

但这不起作用。

在一般情况下,&& 应该可以正常工作,只要链中的每个命令都以 0 退出。如果它们不会(没关系),您可以使用 ;而不是 &&。您可能还需要完全限定任何二进制文件的路径(例如 /bin/sh 而不仅仅是 sh),因为 cmd.run env 往往有一个相当裸露的路径。

也就是说,cmd.run 模块支持 cwd 参数(参见 the documentation),它指定要执行的目录:

试试这样的东西:

salt 'minion_id' cmd.run '/bin/sh my_script.sh my_file.properties' cwd=/my/directory

或者如果您的脚本是可执行的并且有一个 shebang:

salt 'minion_id' cmd.run './my_script.sh my_file.properties' cwd=/my/directory