1

Интересно, возможно ли выполнить сценарий perl, когда процесс с данным PID-файлом достигает в общей сложности 6 часов жизни? Это можно сделать через crontab или аналогичный?

Perl-скрипт, который я хочу выполнить, просто перезапускает процесс.

Я понятия не имею, как бы я поступил так, но я представляю себе, как захватить TIME top .

3 ответа3

1

Следующее даст вам истекшее время (настенные часы), что процесс был в системе.

ps -p PID -e etime,command

Формат не идеален, так как формат меняется в зависимости от продолжительности; если вы выполните это, вы, вероятно, обнаружите, что он получает информацию из /proc /PID /status или подобного

Это образец, который я использовал по случаю; другой вариант связан с rsize, если я беспокоюсь о контроле процесса с тенденцией убегать ...

Это напоминает мне, возможно, ваша проблема может быть лучше решена с помощью чего-то вроде ulimit или команды timeout (или сценария-оболочки, который делает то же самое).

Если у вас есть один в использовании, некоторые инструменты управления конфигурацией (например. CFEngine) позволяет выполнять действия в ответ на такие метрики, как rsize.

0

Я полагаю, что вы хотите, чтобы скрипт выполнялся автоматически, так что вам нужно что-то, что проверяет, истекли ли шесть часов, и выполняет какой-то скрипт, если он есть.

Я предлагаю вам использовать команду watch, которая выполняет данную команду каждые несколько секунд:

 watch -n 10 my_script &

поместит часы в фоновом режиме (значение &), откуда будет выполнять команду my_script каждые 10 секунд (значение -n 10). Файл my_script должен быть файлом сценария bash, который должен быть выполнен исполняемым с помощью chmod 755 my_script, который проверяет (согласно предложениям в других ответах), достигла ли ваша программа лимит в 6 часов, и действует соответствующим образом.

Если вас беспокоит потеря этой команды в фоновом режиме, если оболочка, из которой она запускается, будет уничтожена по какой-либо причине, просто измените команду следующим образом:

  nohup 'watch -n 10 my_script'

он выживет во всем, кроме перезагрузки.

0

Более простым способом было бы получить минуты от PS Aux с чем-то вроде

for i in $(pidof sshd); do ps aux | awk '{print $2" "$10}' | grep "^$i" | awk '{print $2}' | awk -F':' '{print $1}' ; done

Затем вы можете встроить его в скрипт и поместить в cron для перезапуска соответствующих сервисов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .