26
Май

Снятие процесса зависшей программы на хостинге LINUX

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

Делается это с такими целями:

  • экономия ресурсов. Очень часто на различного рода хостингах, устанавливаются ограничения по предоставляемым ресурсам(обычно – около 100 процессорных минут в день) и такие программы, которые выполняются слишком долго и, часто, не дают ожидаемого результата, склонны злоупотреблять ресурсами, выделенными хостингом.
  • оптимизация работы хостинга. Нередко бывает, что владельцы сайтов замечают значительное снижение производительности своего сайта. Тогда начинаются копания в причинах и, часто, в итоге, все заканчивается тем, что владелец добирается до консоли своего хостинга и видит огромное количество работающих ненужных процессов, потребляющих много ресурсов. Их досрочное завершение может значительно ускорить работу сайтов, находящихся на этом сервере.
  • личные причины. Допустим, когда разработчик пытается написать какой-либо скрипт, в процессе разработки он запускает его с целью тестирования и этот скрипт не завершает свою работу, отдавая ошибку 408 Request Timeout. На некоторых хостингах выполнение программы на этом завершается и тогда проблемы нет. Но мало кто знает о том, что максимальное время выполнения скрипта для клиента и сервера, это две разные вещи. Например на моем хостинге, скрипт может выполняться, вплоть до 10 часов. В этом есть, безусловно свои преимущества и недостатки, но все же держать запущенными сотни процессов, если они не нужны, является не очень хорошей идеей.

Завершение процесса в Linux, достаточно простая задача, но требует доступа к консоли сервера по протоколу SSH и право на выполнение определенных команд. Зачастую такой функционал присутствует почти на каждом хостинге, но мало кто о нем знает и/или никогда не пользовались этим функционалом.

Далее – инструкция по принудительному завершению зависшей программы.

Шаг 1. Получаем логин и пароль на хостинге.

Информацию об осуществлении данной задачи можно найти в личном кабинете вашего хостинга. Обычно информацию по доступу к серверу, по протоколу SSH размещают на главной странице, и/или на странице, ссылка на которую имеется на главной странице панели управления хостингом.

Пример, как это выглядит на хостинге Beget:

Из примера видим где можно найти хост, который следует указать при подключении по SSH. Логин и пароль, в данном случае, совпадает с логином/паролем аккаунта. Но может быть и так, что вам придется использовать приватный ключ для доступа к сайту.

Шаг 2. Запуск Putty и подключение к серверу

Так выглядит окно приложения для подключения к серверам по протоколу SSH Putty. Здесь нужно ввести хост сервера, к котором подключаемся, и порт, по которому будет проводиться подключение. Для SSH стандартным является порт 22. Но он может быть любым другим. Если вам нужно использовать приватный ключ для авторизации – также потребуется задать его на вкладке Auth. После заполнения форма, жмем “Open”. После этого согласитесь с приемом сертификата и дождитесь пока появится окно терминала.

Шаг 3. Отображение списка запущенных процессов

Для отображения процессов, в нужном нам виде необходимо выполнить в открытом терминале команду ps, с параметром ef. Выглядеть это должно так:

// OUTPUT CODE
$: ps -ef

Если вы все сделали правильно, должен отобразиться список процессов в виде таблички. Нас интересуют колонки содержащие идентификатор процесса(PID) и его описание(CMD).

Шаг 4. Завершаем выполнение необходимого

По колонке CMВ делаем вывод о том, какие из запущенных процессов нам необходимо завершить. Смотрим в колонку PID необходимых процессов и выполняем команду kill с параметром 9 и идентификатором процесса.

// OUTPUT CODE
$: kill -9 pid

В данном контексте kill означает, что нужно завершить процесс, pid указывает на процесс, который необходимо завершить, а 9 является сообщает операционной системе как это нужно сделать, а именно – завершить процесс принудительно. Если выполнить команду kill без параметра 9, система может не послушать нас и отказаться завершать процесс, “если он сообщит ей, что еще закончил не все свои дела”, говоря простым языком.