Светлячный Dev Лог

Tue 19 August 2014

I'll be back или нотифайки c сервера на десктопе

Tags: administration

Бывают у вас ситуации, когда запускаешь на сервере какую-то команду переключаться на другую задачу, а потом спустя час обнаруживаешь, что задача та давно вы полнилась, и можно было бы продолжать работу, но все это время вчера занимались чем то менее приоритетным? Если так, то читайте дальше - я расскажу что с этим делать.

На OSX Есть такая замечательная штука, как Growl. Это док для всплывающих уведомлений, которым можно управлять из любой программы. Уверен, что на других платформах тоже есть что то подобное, описанный здесь способ будет работать и для них.

Суть метода заключается в том, чтобы сделать возможным обратное подключения по ssh с удаленного сервера на рабочую машинку, и через это соединение запускать команду, которая будет показывать уведомление о завершении работы.

Оба этапа реализуется весьма просто.

Сначала включаем ssh в OSX

Sharing.png System Preferences -> Sharing

Если вы параноик, то можете перенастроить демон так, чтобы он слушал порт на каком-то нестандартном порту.

Далее, пробрасываем порт локального ssh на удаленной машинке

Для этого надо добавить нечто подобное в локальный ~/.ssh/config:

Host *
RemoteForward *:2022 localhost:22

Все, теперь при подключении к любому серверу, с него можно будет подключиться обратно к десктопу вот такой командой:

ssh -p 2022 localhost

Но чтобы не помнить все эти номера портов и укоротить команду, я добавляю в серверный ~/.ssh/config такую секцию:

Host back
Hostname localhost
Port 2022

Она позволяет делать просто ssh back и попадать куда надо.

Дело за малым

Теперь осталось поставить на десктоп утилитку GrowlNotify, через которую можно посылать уведомления в Growl, а в .bashrc (или .zshrc) на всех машинках прописать такую функцию:

function nb ()
{
    GROWL_COMMAND=/usr/local/bin/growlnotify

    if [ -e "$GROWL_COMMAND" ]; then
        $GROWL_COMMAND -m "\"$message\"" -t "\"$title\""
    else
        message="${1:-Done}"
        title="${2:-Remote command}"
        ssh back $GROWL_COMMAND -m "\"$message\"" -t "\"$title\""
    fi
}

Она делает очень простую вещь — если есть growlnotify, то зовет его, если нет — идет по ssh back и зовет growlnotify там. Таким образом, сообщение попадает на десктоп. Теперь можно делать:

./manage.py long-running-command; nb DONE

А в качестве бонуса получаете возможность легко и просто отправлять файлы с сервера на десктоп через scp some-file back:.

Кстати, скриптик этот доступен, как модуль для моего dotfiler.

Comments !