Всем привет!  Давно не постил сюда ничего,т.к. сменил сферу работу, до недавнего времени, я работал в качестве продукт менеджера в нескольких компаниях на протяжении 3х лет. Теперь я решил испытать свои силы в собственных проектах. Поэтому не забывайте о моем блоге. Так же можете меня найти в Вконтакте.
Итак, сейчас я занимаюсь созданием разной сложности сайтов, поэтому, если вам нужен сайт или продающая страница, или сайт-визитка,
обращайтесь сюда.
Кроме этого, я часто получаю вопросы, касаемо “Автопостинг ВК”. Ранее я вел смежный проект и в ближайшее время подниму аналогичный проект для моих читателей.
Кстати, я выиграл в программе “Microsoft azure startup” и мне дали доступ на год бесплатного доступа на облачные решения. Правда, я еще не разобрался что это и как этим пользоваться, если кто знает,отпишитесь.
Резюмируя, мой текущий блог поменяет формат контента на программерскую/менеджерскую тематику.
И в довесок ко всему я хочу поинтересоваться, хотели бы вы видеть мои влоги? (Мое видео на youtube, где я буду рассказывать о текущем проекте и его сложности или пасхалки реализации.)

А ты будешь смотреть мой видео блог?

Да
Не знаю
Может быть
Зачем??

Python_logo

 

Python (англ. python — питон, произносится [ˈpaɪθ⟨ə⟩n] — па́йтон; в русском языке распространено название пито́н[5])[6] — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

К этому языку я шел долго, верней много раз планировал изучение, но постоянно откладывал. В итоге, необходимость заставила применить его в текущей задаче. До этого решал задачи на следующих языках, и добавил свой уровень владения языком

  • bash -advanced developer
  • php – junior developer
  • bash+php

Хочу рассмотреть Python на примере конкретной задачи,которую необходимо реализовать. А реализовать необходимо механизм, который ходит на ftp, скачивает новые файлы, которые еще не были скачены, парсит их, суммирует, группирует – манипулирует данными, добавляет в базу данных.

(more…)

Задача простая, не требующая особого внимания, можете просто воспользоваться копипастом.
У нас есть дамп БД, как правило, дамп разбит на таблицы и лежит в gzip.

table_name_1.sql.gz
table_name_2.sql.gz
table_name_3.sql.gz

Бывает и так, что одна бд задампина в одном файле

db_name.sql.gz

Для этого случае поможет

gzip -d db_name.sql.gz && mysql -uUSER -pPASSWORD -hHOST DB_NAME < /FULL/PATH/db_name.sql

В противном случае, когда дамп состоит из множества таблиц, то самое простое
записать листинг дирректории в файл

ls /FULL/PATH/ >> files

И затем простой bash

cat files | while read line
do
mysql -uUSER -pPASSWORD -hHOST DB_NAME < /FULL/PATH/$line
done

В zabbix есть возможность автоматической инвентаризации, т.е. когда данные сами вставляются в нужные поля.

Но, к сожалению, функционалом zabbix не предусмотрено автоматическое включение инвентаризации на узлах.

Для примера,я рассмотрю следующую задачу, у нас узлы проходят авторегистрацию, необходимо по ним включить автоматическую инвентаризацию, делается вот таким скриптом
(more…)

В zabbix есть дефолтовый способ оповещения по email. Но возникнут вопросы, если у вас не будет собственного smtp сервера, тогда настроить оповещения будет проблематично. Вариантов несколько:

  • искать публичный smtp сервер
  • поднимать где-то самому smtp сервер для zabbix оповещений

Поднимать самому- вариант наиболее фундаментальный, но вам придется дополнительно поддерживать еще один сервис.

Искать публичный сервер тоже не самое благородное занятие, зато есть преимущество- не нужно поддерживать еще один дополнительный сервис, не требует никаких материальных и финансовых затрат, но публичный сервер скорее всего будет занесен в спам базу. Рассмотрим этот способ.

В качестве публичного smtp сервера я выбрал gmail.com. Но он у меня не сразу заработал, я подобрал наиболее оптимальный вариант,и получился вот такой скрипт

(more…)

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

Поднимать самому- вариант наиболее фундаментальный,т.к. вы не будите волноваться о том,что публичный smtp сервер будет в дауне по неизвестным для вас причинам, его никогда не занесут в spam базы,т.к. публичные smtp в основном используют спамеры.

Искать публичный сервер тоже не самое благородное занятие, зато есть преимущество-вам не нужно поддерживать еще один дополнительный сервис, это не трудозатратно и не требует никаких материальных и финансовых затрат. Рассмотрим этот способ.

В качестве публичного smtp сервера я выбрал gmail.com. Но он у меня не сразу заработал, я подобрал наиболее оптимальный вариант,и получился вот такой скрипт

Отправка из telnet email через gmail.com

#! /bin/bash

(
sleep 1
echo "HELO domain.com"
sleep 1
echo "MAIL FROM:<zabbix@zabbix.com>"
sleep 1
echo "RCPT TO:<your@email.com>"
sleep 1
echo "DATA"
sleep 1
echo "From: <zabbix@zabbix.com>"
sleep 1
echo "To : <your@email.com>"
sleep 1
echo "Subject: Just a test\r And body here."
sleep 1
echo "."
sleep 1
echo "quit"
) | telnet gmail-smtp-in.l.google.com 25

Очень часто возникают проблемы, о которых необходимо уведомлять сразу же. В таких случаях необходимо использовать sms уведомления.

В zabbix есть встроенная функция sms уведомления, но чтобы она заработала, вам необходимо к самому серверу zabbix иметь физический доступ, для подключения к нему GSM модема. Нужно настроить его и только потом получить sms уведомления. На мой взгляд, это избыточный способ, поэтому я его пропускаю и рассмотрю наиболее простой вариант подключения sms уведомления к zabbix серверу. Да и в моем случае, мой сервер настроен на VDS где-то в Москве. Так что физического доступа до сервера я не имею.

Zabbix может подключать к себе пользовательские скрипты, которые будут срабатывать как оповещения. Здесь я рассмотрю как добавить такой скрипт.
Для этого вам понадобится sms шлюз в интернете. Он поможет вам высылать sms через интернет, через API. Я использую websms.ru. Подобных систем очень много и почти все дают отправить первые 100 sms бесплатно, так что можете пробовать=).

Предположим, что вы умеете слать sms через API, теперь прикручиваем скрипт отправки к zabbix:

В конфиге:

/usr/local/etc/zabbix_server.conf

находим и раскомментируем строку. Если надо, изменяем путь:

AlertScriptsPath=/usr/local/share/zabbix/alertscripts

Делаем рестарт zabbix.

Далее идем на веб интерфейс zabbix:

zabbix-sms

zabbix-sms

Администрирование – Способы оповещений – Создать способ оповещения
Выбираем тип Скрипт
Там заполняем описаниекак будет выглядеть в интерфейсе zabbix
Имя скрипта : script.shИмя скрипта, он должен быть в /usr/local/share/zabbix/alertscripts (или в другом месте, зависит от того, что у вас в AlertScriptsPath)
И сохраняем.

Далее идем в Настройки – Действия – Создать действия
Пишем название, в условиях выбираем, Значение триггера = “ПРОБЛЕМА”, сохраняем.
В условиях пишем, как на скрине:

zabbix-sms

zabbix-sms

И сам скрипт выглядит так:

#!/bin/bash
to=$1
subject=$2
body=$3
textconvert=$(echo "$2 $3" | iconv -t CP1251)
ENCODEDMESSAGE=$(php -r "echo urlencode(\"$textconvert\");")
curl -s "http://www.websms.ru/http_in5.asp?Http_username=USER&Http_password=PASS&Phone_list=$to&Message=$ENCODEDMESSAGE

$1,$2,$3 – эти значения нам передает сам zabbix. Скрипт передает текст в кириллице, конвертим ее и высылает на смс через API.

Работая продолжительное время в одной из интернет компаний новосибирска, сталкиваюсь ежедневно с необходимость залить какой-нибудь хотфикс на сайт. Сложность в том, что эта по сути мелочь, очень отвлекает от текущих задач. Да и в случае, если у нас несколько серверов, необходимо заходить на каждый сервер и заливать хотфикс.

Параллельно этому решал проблемы с непрерывным внедрением на сайт, этому был посвящен этот пост.
Если вкратце, разбирал системы внедрения посредством Hudson,CruiseControl,Capistrano. У каждой из них есть масса достоинств и недостатков. Один из существенных недостатков для меня, это необходимость устанавливать дополнительное ПО, для установки этих систем, и сложность конфигурации.

Я решил реализовать свою схему непрерывной интеграции, посредством связки git+bash+webinterface.
Таким образом я думаю, что эту схему можно назвать “Easy To Go”, т.к. не требует дополнительной установки ruby,java, не требует БД, и много времени на понимание интерфейса, и как это все работает.

Пока названия не придумал, поэтому пока буду называть ее autodeploy.
Так вот, autodeploy имеет:

дружелюбный и простой веб-интерфейс,
возможность заливать с одного места git ветки на удаленные хосты,
в конфиге вы можете описать доступные ветки,

application/config/branch.inc

в конфиге вы можете описать доступные хосты,

application/config/config.inc

Сам проект развивается здесь.

Теперь немного по подробней:

(more…)

Давно была у меня проблема, описанная здесь
Недавно я столкнулся с такой же задачей, мне нужно удалить все архивы, оставив только N самых свежих.
Посему я решил значительно усовершенствовать код

#! /bin/bash
donttouch=7 #число файлов/папок, которое на нужно оставить
path="/home/PATH" # путь, где вы хотите провести чистку
count=$(ls $path|grep "[0-9]\{1,\}"|wc -l)
countdelete=$(($count-$donttouch))
dirs=$(ls -l $path|awk '{print $9}'|grep "[0-9]\{1,\}"|sort -n|head -n$countdelete)
for dir in $dirs
do
rm -rf $path/$dir #шаг удаления. На этом шаге вы можете заменить мое удаление и добавить все, что угодно(rsync,rm..etc)
done

Получился вот такой компактный сценарий.

Последнее время наблюдается постоянные падения сайта, судя по графику

Load average

растет LA, сайт не успевает отвечать, огромное кол-во процессов в очереди на исполнения. Это следствие плохого конекта до базы

ping to database

Больше никакой информацией с мониторинга не владею, поэтому дальше идем в логи, находим сомнительные записи

kernel: TCP: time wait bucket table overflow
kernel: possible SYN flooding on port 80. Sending cookies.

В итоге есть 2 причины, по которым есть большая вероятность, что сайт падал:

  1. Плохой конект до базы
  2. Атака

(more…)