Echo a lista de processos que não estão em execução

3

Eu desenvolvi um script, o script refere-se a um arquivo para iniciar os processos necessários nesse servidor. O script expira após 180 segundos. No final do script, gostaria de exibir os processos que não foram iniciados dentro de um período de tempo de 180 segundos. Como faço para isso?

Arquivo de referência ref.txt :

#TEST:process1
#TEST:process2
TEST:Process3
TEST:process4
TEST:process5

A linha de comandos usada no script para iniciar os processos necessários é

grep "TEST:" /products/test/ref.txt | while read LINE (Selects process3,4,5 to start)
do
PROC_NAME=$(echo ${LINE} | awk -F ':' '{print $2}')
echo "Starting the required process"
echo "<command line to start the processes>"
done 

#Giving script 180 seconds to start the processes

(( START_TIME = 0 ))
until [ ${START_TIME} -gt 180 ]
do 
greps for the processes running
echo " N number of processes are running"
<I want to display the processes which have not started here>
done

Os scripts expiram após 180 segundos.

Eu preciso adicionar uma lógica para exibir os processos que não começaram depois de 180 segundos, como faço isso?

    
por Amit Baid 24.07.2016 / 12:10

2 respostas

4

Assumindo um shell como bash ou ksh :

max_time=3

SECONDS=0

IFS=$'\n:'

grep -v '^#' ref.txt |
while read tag cmd; do
    if (( SECONDS < max_time )); then
        echo "starting '$cmd' (tag is '$tag')"
        sleep 2 # for simulation purposes
    else
        echo "did not have time to start '$cmd' (tag is '$tag')"
    fi
done

Isso gerará a seguinte saída:

$ ksh script.sh
starting 'Process3' (tag is 'TEST')
starting 'process4' (tag is 'TEST')
did not have time to start 'process5' (tag is 'TEST')

O script seleciona todas as linhas do arquivo ref.txt que não são comentadas e as divide em : para separar a tag inicial do comando.

Se o script ainda não expirou, ele inicia o processo de leitura atual (simulado com uma chamada sleep aqui).

Se ele tiver usado muito tempo, ele não iniciará mais processos, mas informará os que ainda não foram iniciados.

O tempo limite não ocorrerá de forma assíncrona, ou seja, o script não interromperá o início de um processo se mais de max_time segundos tiver decorrido.

A variável SECONDS contém o número de segundos desde que o shell foi iniciado ou, como neste caso, desde a última vez que foi definido como zero.

    
por 24.07.2016 / 14:05
1

lógica para exibir os processos que não foram iniciados após 180 segundos. Assumindo que a casca é uma concha bourne. Eu testando em bash e zsh

# ...

# generate a timestamp in seconds since UNIX epoch
START_TIME=$(date '+%s')
until [[ $(date +%s) -gt $((START_TIME + 180)) ]]
do 
    # greps for the processes running
    echo " N number of processes are running"
    #<I want to display the processes which have not started here>
done

# ...
    
por 24.07.2016 / 13:48