Salt 无法使用管道或重定向执行命令
Salt fails to execute commands with pipes or redirects
当我 运行 任何带有管道或重定向的命令时,它都会失败。
主人和仆从都运行正在为测试 Salt 而创建的 Ubuntu 14.04 Digital Ocean 盒子。
两者都是使用 bootstrap 脚本从 git 拉取最新分支安装的。
这是我得到的:
# salt-call --local cmd.run "ps aux | grep hello" -l debug
[DEBUG ] Reading configuration from /etc/salt/minion
[DEBUG ] Using cached minion ID from /etc/salt/minion_id: XXX.XXX.XX
[DEBUG ] Configuration file path: /etc/salt/minion
[DEBUG ] Reading configuration from /etc/salt/minion
[DEBUG ] Failed to import module debian_service. The exeception was No module named systemd. Another attempt will be made to try to resolve dependencies.
[DEBUG ] compile template:
[ERROR ] Template does not exist:
[INFO ] Executing command 'ps aux | grep hello' in directory '/root'
[ERROR ] Command 'ps aux | grep hello' failed with return code: 1
[ERROR ] output: error: garbage option
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
没有管道也能正常工作,但显然 returns 完整输出。
尝试使用 python_shell=True
或 cmd.shell
:
root@323be0968814:/# salt-call --local cmd.run "ps aux | grep hello" python_shell=True
[INFO ] Executing command 'ps aux | grep hello' in directory '/root'
local:
root 4796 0.0 0.1 134688 24200 ? S+ 14:50 0:00 /usr/bin/python /usr/bin/salt-call --local cmd.run ps aux | grep hello python_shell=True
root 4819 0.0 0.0 4444 652 ? S+ 14:50 0:00 /bin/sh -c ps aux | grep hello
root 4821 0.0 0.0 4444 104 ? R+ 14:50 0:00 /bin/sh -c ps aux | grep hello
root@323be0968814:/# salt-call --local cmd.shell "ps aux | grep hello"
[INFO ] Executing command 'ps aux | grep hello' in directory '/root'
local:
root 4822 0.0 0.1 134688 24204 ? S+ 14:52 0:00 /usr/bin/python /usr/bin/salt-call --local cmd.shell ps aux | grep hello
root 4845 0.0 0.0 4444 648 ? S+ 14:52 0:00 /bin/sh -c ps aux | grep hello
root 4847 0.0 0.0 4444 100 ? R+ 14:52 0:00 /bin/sh -c ps aux | grep hello
来自 the cmd.run
docs(强调我的):
WARNING: This function does not process commands through a shell
unless the python_shell flag is set to True. This means that any
shell-specific functionality such as 'echo' or the use of pipes,
redirection or &&, should either be migrated to cmd.shell or have the
python_shell=True flag set here.
当我 运行 任何带有管道或重定向的命令时,它都会失败。
主人和仆从都运行正在为测试 Salt 而创建的 Ubuntu 14.04 Digital Ocean 盒子。
两者都是使用 bootstrap 脚本从 git 拉取最新分支安装的。
这是我得到的:
# salt-call --local cmd.run "ps aux | grep hello" -l debug
[DEBUG ] Reading configuration from /etc/salt/minion
[DEBUG ] Using cached minion ID from /etc/salt/minion_id: XXX.XXX.XX
[DEBUG ] Configuration file path: /etc/salt/minion
[DEBUG ] Reading configuration from /etc/salt/minion
[DEBUG ] Failed to import module debian_service. The exeception was No module named systemd. Another attempt will be made to try to resolve dependencies.
[DEBUG ] compile template:
[ERROR ] Template does not exist:
[INFO ] Executing command 'ps aux | grep hello' in directory '/root'
[ERROR ] Command 'ps aux | grep hello' failed with return code: 1
[ERROR ] output: error: garbage option
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
没有管道也能正常工作,但显然 returns 完整输出。
尝试使用 python_shell=True
或 cmd.shell
:
root@323be0968814:/# salt-call --local cmd.run "ps aux | grep hello" python_shell=True
[INFO ] Executing command 'ps aux | grep hello' in directory '/root'
local:
root 4796 0.0 0.1 134688 24200 ? S+ 14:50 0:00 /usr/bin/python /usr/bin/salt-call --local cmd.run ps aux | grep hello python_shell=True
root 4819 0.0 0.0 4444 652 ? S+ 14:50 0:00 /bin/sh -c ps aux | grep hello
root 4821 0.0 0.0 4444 104 ? R+ 14:50 0:00 /bin/sh -c ps aux | grep hello
root@323be0968814:/# salt-call --local cmd.shell "ps aux | grep hello"
[INFO ] Executing command 'ps aux | grep hello' in directory '/root'
local:
root 4822 0.0 0.1 134688 24204 ? S+ 14:52 0:00 /usr/bin/python /usr/bin/salt-call --local cmd.shell ps aux | grep hello
root 4845 0.0 0.0 4444 648 ? S+ 14:52 0:00 /bin/sh -c ps aux | grep hello
root 4847 0.0 0.0 4444 100 ? R+ 14:52 0:00 /bin/sh -c ps aux | grep hello
来自 the cmd.run
docs(强调我的):
WARNING: This function does not process commands through a shell unless the python_shell flag is set to True. This means that any shell-specific functionality such as 'echo' or the use of pipes, redirection or &&, should either be migrated to cmd.shell or have the python_shell=True flag set here.