Все должно работать в фоновом режиме, а не в ожидании.

Попробуйте awk

awk '
    NR==FNR{
        A[NR]=$1
        limit=NR
        next
    }
    /^avocado/{
        i=i%limit+1
        $1=A[i]
    }
    {
        print
    }
    ' newservers.lst servers.txt

Sed тоже можно:

sed '/^\s*\S\+\s*$/ {            #match 1st file only
        x                        #exchange line with holdspace
        H                        #add pre-holdspace to pre-line
        d                        #no print
    }                            #result: reversed 1st file in holdspace
    /^avocado/{
        G                        #add holdspace to line
        s/\S\+\(.*\)\n\(\w\+\)\n*$/\2\1/
                                 #replace 1st word by last word(from holdspace)
        P                        #print line before holdspace resedue
        s/\s[^\n]*//             #remove all from 1st word to holdspace
        h                        #return holdspace with last word became first
        d                        #no print
    }
    ' newservers.lst servers.txt
1
18.01.2019, 22:33
2 ответа

Если я правильно понял, вы хотите запустить команды ssh, дождаться завершения и отправить почту в фоновом режиме. Это означает, что скрипт может завершиться до завершения работы ssh и почты.

Поэтому я бы предложил следующее решение:

#!/bin/bash

# Set to real file if you want "log output"
log_file=/dev/null

file_save=/whatever

command3=<some command here>

function exec_ssh
{
    for i in $(cat $file_name); do
        ssh -q -o "StrictHostKeyChecking no" -o "NumberOfPasswordPrompts 0" -o ConnectTimeout=2 $i "echo -n $i;echo -n ',';$1" 2>/dev/null &
    done >> $file_save
    wait
    mailx -s "Servers Command Output" -a $file_save  <my mail_id@abc.com>
}

# export function, so it is callable via nohup
export -f exec_ssh $command3

# clear file_save
>$file_save

# run exec_ssh in the background. 
# nohup keeps it running, even when this script terminates.
nohup exec_ssh &>$logfile &

# Inform user
echo " The output can be monitored in $file_save....................Please Be Patient"
echo "Mail will get triggered once completed"

exit 0

Функция exec _ssh выполняет всю работу и запускается в фоновом режиме с помощью nohup. Таким образом, фоновое задание продолжает работать после завершения сценария или даже при закрытии терминала.

Я не знаю, что происходит, когда пользователь выходит из системы.

0
28.01.2020, 00:21

В качестве альтернативы

function doit () {
    ssh -q -o "StrictHostKeyChecking no" -o "NumberOfPasswordPrompts 0" -o ConnectTimeout=2 $1 "echo -n $1;echo -n ",";$command3" 2>>/dev/null &
}
export -f doit
C=$(cat $file_name | wc -l)    
cat $file_name | xargs -I {} -P $C bash -c "doit \"{}\"" >> $file_save
mailx -s "Servers Command Output" -a $file_save  <my mail_id@abc.com>
0
28.01.2020, 00:21

Теги

Похожие вопросы