2015-02-04 2 views
1

Когда я запускаю любую команду с трубой или перенаправляю в нее, она терпит неудачу.Соль не может выполнять команды с трубами или перенаправлять

Оба мастера и миньон работают на свежих ящиках Ubuntu 14.04 на Digital Ocean, созданных для тестирования соли.

Оба были установлены с использованием сценария начальной загрузки, потянув последнюю ветку из 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). 

Он отлично работает без трубы, но, очевидно, возвращает полную мощность.

+0

Можете ли вы перефразировать это как вопрос? Неясно, чего вы хотите. – oeuftete

+0

Извините, в двух словах я пытаюсь запустить команду с помощью трубы. Сначала я столкнулся с проблемой, используя этот учебник: http://blog.publysher.nl/2013/08/infra-as-repo-securing-your.html. Он продолжал терпеть неудачу на линии cmd = 'uufw status | grep "Status: active", потому что труба "|" не работает –

ответ

6

Попробуйте использовать python_shell=True или cmd.shell:

[email protected]:/# 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 

[email protected]:/# 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 (курсив мой):

ВНИМАНИЕ: Эта функция делает команды не процесс через оболочку , если флаг python_shell не установлен в значение True , Это означает, что любой оболочки специфические функциональные возможности, такие как «эхо» или с использованием труб, перенаправлением или & &, должны быть либо перенесены в cmd.shell или иметь python_shell = True флаг установлен здесь.

+0

Большое спасибо! –