Executar e salvar log

Executar e salvar log

Estou executando o script nos Argumentos via loop e salvando os logs em um arquivo. Como usar o comando Args para executar de uma só vez. Abaixo tentei args -n -500

Mas isso não salva logs. Como anexar para salvar logs aqui?

Responder1

Eu acho que você só precisagrupoos comandos do loop interno e redirecionam sua saída para um arquivo indexado pelo mesmo índice $ie, em seguida, enviam todos juntos em segundo plano &. Algo como

for i in $(cat $file_name)
do
    (echo "$i"; /path/script.pl "$i") >> "${file_save}-${i}" &
done

Além disso for, catneste caso, eu usaria whilee readde alguma forma assim:

#!/bin/bash

file_name='in_file'

while IFS= read -r i
do
        (echo "$i"; /path/script.pl "$i") >> "${file_save}-${i}" 2>&1 &
done < "$file_name"

Aqui 2>&1é adicionado caso você queira ter as mensagens de erro em seu arquivo de log. Mais sobre a construção IFS= read -r linepode ser encontrada nesteresposta enciclopédicafornecido por @StéphaneChazelas.

Além disso, se a execução ./script.pldemorar muito, você poderá se desconectar do shell atual caso feche acidentalmente a janela do terminal onde o script principal foi iniciado. Para isso você pode usarnohup mycommand &em vez disso, apenas &.


De acordo com o cenário acima, provavelmente a maneira mais fácil de mesclar todos os logs em um arquivo é usar um loop novamente (depois que todos os trabalhos do script principal terminarem) da seguinte maneira:

#!/bin/bash

file_name='in_file'
merged_log='out_file'

>"$merged_log"   # empty the merged log file - not mandatory if the file doesn't exist

while IFS= read -r i
do
        cat "${file_save}-${i}" >> "$merged_log"
        rm "${file_save}-${i}"
done < "$file_name"

Isso também deve funcionar:

#!/bin/bash

file_name='in_file'
merged_log='out_file'

while IFS= read -r i
do
        cat "${file_save}-${i}"
        rm "${file_save}-${i}"
done < "$file_name" > "$merged_log"

Responder2

Se a ordem de gravação não importa,

for i in $(cat $file_name);do echo $i; ./script.pl $i>>file & done

Isso é paralelo.

informação relacionada