Как фильтровать соответствующие процессы по времени выполнения?

Как я могу распечатать процессы, которые выполняются более 30 минут?

Я могу перечислить все процессы так:

ps ax pid,etime,ocmd

Но как я могу отфильтровать только сценарии, соответствующие /var/www/vhosts/path/to/my_script.php и, которые выполняются более 30 минут?


person Ryan    schedule 11.05.2015    source источник


Ответы (1)


ps -eao etime,pid,command | awk -F":" '$2>30' | grep my_script.php

ИЗМЕНИТЬ

Должен проверить также часы! простите

ps -eao etime,pid,command | awk -F":" '$1>=0 || $2>30' | grep my_script.php
person Alejandro Teixeira Muñoz    schedule 11.05.2015
comment
Я не могу заставить это работать. Я подозреваю, что это потому, что etime менее 1 часа представлены как 00:00, а не 00:00:00. Таким образом, новый скрипт, запущенный в течение 1 минуты, может отображать etime из 01:00, или другой скрипт может выполняться в течение 45 секунд: 00:45. Оба они соответствуют вашему awk -F":" '$1>=0 || $2>30'. - person Ryan; 11.05.2015
comment
Я также пытался использовать NF, но awk терпит неудачу, если час не существует: awk -F":" '$(NF-2)>=0 || $(NF-1)>30'. Что ты порекомендуешь? - person Ryan; 11.05.2015
comment
Я думаю, что вы должны использовать разделение, например, и ссылаться на количество разделенных частей: ps -eao etime,pid,command | awk '{ split($1,arra,":"); if(length(arra)>2 && ( arra[1] > 0 || arra[2] > 30 ) ) {print $0 } else if(arra[1]>30){print $0 } }' - person Alejandro Teixeira Muñoz; 12.05.2015
comment
Таким образом, вы будете контролировать значения всех различных частей поля $1 и сможете проверить, равны ли они 3 или 2. Затем просто проверьте часы в arra[], который является массивом, сообщенным разделением с помощью разделенные значения. - person Alejandro Teixeira Muñoz; 12.05.2015