Como ler comandos do arquivo?

3

Eu tenho alguns scripts php que eu executo em ordem seqüencial como:

php index.php import file1 --offline &&
php index.php import file2 --deleteUnused &&
php index.php import file3

Agora, descobri recentemente o comando parallel e tentei algo assim:

parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"

E isso funciona perfeitamente.

É possível que eu tenha um arquivo onde todos os comandos acima estejam incluídos e inicie parallel com uma opção para ler os comandos do arquivo?

Algo parecido com isto:

parallel -XX myFileWithCommands.txt
    
por MadeOfSport 02.07.2014 / 21:44

2 respostas

5

Crie myFileWithCommands.txt :

php index.php import file1 --offline
php index.php import file2 --deleteUnused
php index.php import file3

Em seguida, execute paralelo da seguinte forma:

parallel -j 3 -- < myFileWithCommands.txt
    
por 02.07.2014 / 22:13
2

Bem, existem duas maneiras simples de conseguir isso que eu posso imaginar. Você pode enviar o conteúdo do arquivo para parallel ou pode escrever um script de shell. Se tudo o que você deseja realizar é esse conjunto específico de tarefas, um script de shell pode fazer mais sentido. Seria muito curto, doce e direto também:

#!/bin/sh
parallel -j 3 -- "php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"

Agora, se você quer algo mais generalizável (ou seja, algo para que você possa fazer vários conjuntos de comandos para serem carregados como um grupo), então pode ser mais fácil criar um formato de arquivo simples e depois canalizar o conteúdo do arquivo em parallel .

A maneira mais simples de fazer isso é se o texto incluir os comandos verbatim que você deseja executar.

Por exemplo, se este fosse seu arquivo de texto ( test.txt ):

"php index.php import file1 --offline" "php index.php import file2 --deleteUnused" "php index.php import file3"

Em seguida, você pode executar o seguinte e funcionar bem:

$ cat test.txt | parallel -j 3 -- 

Você também pode experimentar um formato de arquivo um pouco mais complexo (por exemplo, cada comando em uma nova linha e não entre aspas). Se você fosse por esse caminho, você precisaria fazer uma pequena análise no arquivo antes de canalizá-lo para parallel , o que poderia ser feito facilmente com, por exemplo, awk .

No entanto, se você decidir criar um formato de arquivo mais flexível como esse, pode ser útil criar um script de shell auxiliar (ou função) que evite que você tenha que digitar awk '<whatever patterns you match> { do something }' | parallel -j3 -- a cada vez.

    
por 02.07.2014 / 22:11