Faça o relógio reavaliar o comando

0

Oi, eu tenho um problema ao executar o comando watch da seguinte forma:

 watch cat /proc/$(ps ax | grep processname | grep -v grep | awk '{print $1}')/status

O comando funciona quando eu inicio. No entanto, reinicio o processo que está sendo observado e o comando watch ainda usa o ID do processo antigo. Quero que atualize o id do processo e mostre o status de um novo processo com o mesmo nome. A parte $(ps ax | grep processname | grep -v grep | awk '{print $1}') é obviamente executada apenas no início. Como posso fazer com que seja reavaliado toda vez que o relógio atualizar a saída?

Eu não gostaria de colocar o comando cat em um script bash e executar esse script do relógio.

    
por nobody 05.01.2018 / 08:42

3 respostas

1

Não é um bom caminho, mas se você realmente se sentir relutante em criar um script. Você pode tentar eval .

 watch eval 'cat /proc/$(ps ax | grep processname | grep -v grep | awk '"'"'{print $1}'"'"')/status'
    
por 05.01.2018 / 08:56
1

Salve o seguinte como, por exemplo, ps-status.sh em algum lugar em seu $ PATH e torne-o executável com chmod +x :

#!/bin/sh

[ -z "$1" ] && echo "process name required" && exit 1

pid="$(pgrep -f "$1")"

[ -z "$pid" ] && echo "no such process: $1" && exit 1

countpids="$(echo "$pid" | wc -l)"
[ "$countpids" -gt 1 ] && "Warning: more than one pid matches $1" && exit 1


cat "/proc/$pid/status"

Em seguida, execute watch da seguinte forma:

watch ps-status.sh processname

$pid provavelmente deve ser uma matriz, mas isso exigiria bash em vez de apenas sh:

#!/bin/bash

[ -z "$1" ] && echo "process name required" && exit 1

pids=( $(pgrep -f "$1") )

[ "${#pids[@]}" -eq 0 ] && echo "no such process: $1" && exit 1
[ "${#pids[@]}" -gt 1 ] && echo "Warning: more than one pid matches $1"

# display first matching PID, even if there were more than 1 matching.
cat "/proc/${#pids[0]}/status"
    
por 05.01.2018 / 08:53
0

script.sh

#!/bin/bash
ps -eaf | grep -i processname| grep -v grep |awk '{print $2}'
/etc/init.d/servicename restart

explicação

agende o crontab para cada 1 minuto

Em seguida, use o comando watch abaixo para ver a diferença no ID do processo depois de reiniciar o nome do processo

watch -n 60 script.sh  
por 05.01.2018 / 16:28

Tags