Como executar vários comandos script ssh bash [closed]

1

Eu quero executar vários comandos em um script Bash em ssh com esses comandos e gostaria de executar cada comando depois de terminar cada um.

#!/bin/bash

/usr/bin/php indexer.php --reindex catalog_product_attribute
/usr/bin/php indexer.php --reindex catalog_product_price
/usr/bin/php indexer.php --reindex catalog_url
/usr/bin/php indexer.php --reindex catalog_product_flat
/usr/bin/php indexer.php --reindex catalog_category_flat
/usr/bin/php indexer.php --reindex catalog_category_product
/usr/bin/php indexer.php --reindex catalogsearch_fulltext
/usr/bin/php indexer.php --reindex cataloginventory_stock
/usr/bin/php indexer.php --reindex tag_summary

Qualquer ajuda é apreciada.

    
por Dario 27.02.2014 / 16:42

4 respostas

3

Como NickW disse, você pode usar o duplo-e-comercial para separar os comandos em uma única linha.

No entanto, você também deve entender o que o double-e comercial faz e decidir se você precisa usá-lo ou apenas um ponto e vírgula.

O e comercial duplo executará o próximo comando somente se o comando anterior sair com um status zero. No exemplo abaixo, command3 não será executado se command1 ou command2 falhar.

ssh user@host "command1 && command2 && command3"

Ponto-e-vírgula executará todos os comandos, independentemente do status de saída. No exemplo abaixo, todos os três comandos serão executados.

ssh user@host "command1;command2;command3"

Em suma: double-e comercial deve ser usado se os comandos dependerem um do outro, ponto-e-vírgula deve ser usado se não o fizerem.

Com este exemplo específico, no entanto, você deve considerar mover / implantar o script no servidor de destino e invocá-lo pelo SSH, pois a combinação de todos esses comandos resultará em um comando SSH grande e de difícil controle.

ssh user@host "/path/to/script.sh"

    
por 27.02.2014 / 16:56
0

Basicamente você só precisa separar os comandos com dois e-mails && .

Então você escreveria isto:

#!/bin/bash

/usr/bin/php indexer.php --reindex catalog_product_attribute && /usr/bin/php indexer.php --reindex catalog_product_price

Usando o && para anexar o próximo comando.

    
por 27.02.2014 / 16:49
0

& & é o jeito certo de fazer isso, no entanto, se você tem muitas tarefas, visualmente é confuso. Uma solução mais elegante é algo nas seguintes linhas:

$phppath = /usr/bin/php

array = (catalog_product_attribute, ...)

for item in ${array[*]}
    $phppath indexer.php --reindex $item'

NOTA: O código não foi testado, mas está conceitualmente correto.

    
por 27.02.2014 / 17:00
0

Você pode usar pipes para enviar o conteúdo de um script para um sistema remoto.

Tente algo assim: cat file | ssh remote bash

    
por 27.02.2014 / 18:37

Tags