screen на службе парсера
Прошлым летом во время отпуска я занимался парсингом сайтов. К сожалению, стабильного и быстрого Интернета мне не досталось. Даже хвалёный 3G-модем от Мегафона иногда выдавал среднюю скорость 10кб/сек, переподключаясь каждые 10 минут. В таких условиях парсить с локальной машины очень сложно. На помощь приходит сервер в Интернете. А чтобы запущенный скрипт в момент отсутствия у вас Интернета продолжал работать – консольная команда screen.
Пользоваться командой screen просто. После выполнения данной команды вы увидите тот же самый терминал от того же самого пользователя. Только эта терминальная сессия будет выполняться внутри screen. Вы сразу же можете запустить любую консольную команду и отсоединиться от сессии сочетанием CTRL+A, D
. При этом на экране вы увидите:
[detached] lgndru@hermes ~ $ |
Если вы хотите выйти и завершить текущую screen сессию, то воспользуйтесь комбинацией CTRL+D
[screen is terminating] lgndru@hermes ~ $ |
Чтобы просмотреть список текущих запущенных сессий:
screen -ls There are screens on: 982.pts-2.hermes (Detached) 7752.pts-1.hermes (Detached) 2 Sockets in /var/run/screen/S-lgndru. |
Для возврата в первый screen:
screen -x 982.pts-2.hermes |
Если запущена только одна сессия, достаточно команды
screen -x |
При работе с несколькими сессиями удобно задавать имя для сеанса. Для этого при создании наберите:
screen -S name |
Вернуться в этот сеанс можно по указанному имени:
screen -x name |
Список заданных имен можно просмотреть с помощью ключа -ls:
screen -ls There are screens on: 982.pts-2.hermes (Detached) 7752.name (Detached) 2 Sockets in /var/run/screen/S-lgndru. |
При задании имени сессий есть нюанс. Предположим, мы создали сеанс name
и хотим добавить name_new
:
screen -S name_new screen -ls There are screens on: 982.pts-2.hermes (Detached) 7752.name (Detached) 8731.name_new (Detached) 3 Sockets in /var/run/screen/S-lgndru. |
Если вы захотите вернуться в сеанс name
, то увидите предупреждение:
screen -x name There are several suitable screens on: 7752.name (Detached) 8731.name_new (Detached) Type "screen [-d] -r [pid.]tty.host" to resume one of them. |
Задавайте своим сессиям уникальные имена, чтобы не было совпадения имени с начала строки.
Если же вы хотите полностью изучить столь полезный инструмент, то обязательно прочитайте manual на русском – http://xgu.ru/wiki/man:screen
P.S. Если на вашем хостинге screen отключен, можно создать разовую задачу CRON. Минусом данного решения является невозможность просмотреть ход выполнения процесса, а в случае необходимости повторного запуска потребуется исправить CRON-задачу.