Как получить время процесса, созданного удаленно через ssh? - PullRequest
1 голос
/ 08 октября 2011

В настоящее время я пишу сценарий, целью которого является уничтожение процесса, время выполнения которого превышает пороговое значение.«Убийца» запускается на нескольких хостах, и задания отправляются сервером каждому хосту.Моя идея состояла в том, чтобы использовать 'ps', чтобы получить время выполнения задания, но все, что оно печатает, это

17433 17433?00:00:00 python

независимо от того, сколько времени я жду.

Я попытался найти упрощенный пример, чтобы избежать публикации всего кода, который я написал.Давайте назовем S сервером, а H хостом.

Если я сделаю следующие шаги:

1) ssh login @ H с сервера 2) python myscript.py (теперь зарегистрирован на хосте)) 3) ps -U login (все еще на хосте)

Я получаю тот же результат, что и выше 00:00:00, что касается времени.

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

Я очень благодарен вам за вашу помощь.

V.

Ответы [ 3 ]

2 голосов
/ 08 октября 2011

Кроме того, вы можете посмотреть на создание файла pid в / var / run, предполагая, что ваш процесс создал его, и использовать команду find, чтобы увидеть, превышает ли он определенный порог:

find /var/run/ -name "myProcess.pid" -mtime +1d

Возвращает имя файла, если оно соответствует критериям (последнее изменение не менее 1 дня назад). Возможно, вы также захотите проверить, действительно ли процесс запущен, так как он мог произойти сбой и оставить пид позади.

1 голос
/ 08 октября 2011

Если вы хотите, чтобы как долго процесс был жив, вы можете попробовать

stat -c %Y /proc/`pgrep python`

.. который вернет его вам в эпоху. Если поочередно вы хотите убить за один раз, я предлагаю использовать упомянутую выше находку (но, возможно, укажите ее на /proc)

1 голос
/ 08 октября 2011

Попробуйте:

ps kstart_time -ef | grep myProc.py | awk '{print $5}'

Это покажет дату / время начала процесса myProc.py:

[ 19:27 root@host ~ ]# ps kstart_time -ef | grep "httpd\|STIME" | awk '{print $5}'
STIME
19:25

Другой вариант - etime.

etime - это время, прошедшее с начала процесса, в форме dd-hh:mm:ss.дд - количество дней;чч, количество часов;мм, количество минут;ss, количество секунд.

[ 19:47 root@host ~ ]# ps -eo cmd,etime
CMD        ELAPSED
/bin/sh    2-16:04:45

И еще один способ сделать это:

Получить pid процесса и прочитать метку времени в соответствующем подкаталоге в /proc.

Сначала получите pid процесса с помощью команды ps (ps -ef или ps aux)

Затем используйте команду ls, чтобы отобразить метку времени создания каталога.

[ 19:57 root@host ~ ]# ls -ld /proc/1218
dr-xr-xr-x 5 jon jon 0 Sep 20 16:14 /proc/1218

Из отметки времени можно сказать, что процесс 1218 начал выполняться 20 сентября, 16: 14.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...