Get Social

Bash скрипт в одну строку для проверки свободного места в Linux

Эта задача возникла после переноса сайтов клиента со старого VPS на новый. На новом виртуально сервере всё хорошо с процессором и озу, однако дискового пространства “впритык”. Получилось так, что Vesta CP, которая по-умолчанию создаёт 3 бэкапа, просто заполнила диск под ноль.

Клиент попросил, чтобы когда места становится мало – об этом сразу стало известно. Поэтому я решил сделать очень простой скрипт в одну строку, который отслеживает дисковое пространство и отправляет уведомление на электронную почту. Такой скрипт можно целиком прописать в планировщик Cron.

Собственно, вот он:

Скрипт мониторинга дискового пространства в Linux


if [ "`df | grep "/dev/sda1" | awk '{print $5}' | sed 's/\%//'`" -ge 95 ]; then echo "Disk usage exceeded 95%" | mail -s "Warning! My Server" mail@example.com; fi

При достижении использования диска на 95% этот однострочный скрипт начнёт присылать сообщения с предупреждениями на почту “mail@example.com”. Например, можно добавить эту строчку в крон, чтобы проверка была каждые 45 минут. Конечно, можно хоть каждую минуту поставить, но тогда ваш ящик просто завалит этими сообщениями.

Можно также пойти дальше и сделать, чтобы у нас был ещё одно предупреждение при достижении 99%:

if [ "`df | grep "/dev/sda1" | awk '{print $5}' | sed 's/\%//'`" -ge 99 ]; then echo "Disk usage exceeded 99%!" | mail -s "Panic!! My Server" mail@example.com; fi
Тут ситуация посерьёзнее, поэтому можно в кроне поставить, чтобы проверка была каждые 5 минут

В итоге получим в crontab:

# server usage alert
*/45 * * * * if [ "`df | grep "/dev/sda1" | awk '{print $5}' | sed 's/\%//'`" -ge 95 ]; then echo "Disk usage exceeded 95%" | mail -s "Warning! My Server" mail@example.com; fi
*/5 * * * * if [ "`df | grep "/dev/sda1" | awk '{print $5}' | sed 's/\%//'`" -ge 99 ]; then echo "Disk usage exceeded 99%!" | mail -s "Panic!! My Server" mail@example.com; fi

Конечно, можно пойти ещё дальше и сделать из этих скриптов 1 в отдельном файле и с красивым синтаксисом и отступами. Но описанный выше вариант просто работает и мне этого достаточно.

P.S. Убедитесь, что в выводе команды df у вас будет нужный диск (“/dev/sda1” или может быть что-то другое)

Установка и настройка sphinx на centos 5

Эта информация подойдёт для sphinx версий 2.0.9 и ниже (также sphinx 1.x).
Если вам нужно установить и настроить версию 2.2.x (2.2.11, например), тогда смотрите здесь >>

[1] Инсталляция sphinx на centos 5

Где искать информацию?

Как всегда – сначала смотрим, что есть в поиске по запросу “установка sphinx на centos”.
Открываем несколько вкладок и работаем. Ну и конечно же, смотрим официальную документацию (http://sphinxsearch.com/docs)
yum search sphinx
yum install sphinx
cat /etc/redhat-release
CentOS release 5.9 (Final)

wget http://sphinxsearch.com/files/sphinx-2.0.9-1.rhel5.i386.rpm
yum --nogpgcheck localinstall sphinx-2.0.9-1.rhel5.i386.rpm

rpm -Uvh sphinx-2.0.9-1.rhel5.i386.rpm
ошибка: Неудовлетворенные зависимости:
libmysqlclient.so.15 нужен для sphinx-2.0.9-1.rhel5.i386
libmysqlclient.so.15(libmysqlclient_15) нужен для sphinx-2.0.9-1.rhel5.i386

иду на http://sphinxsearch.com/docs/current.html#installing
wget http://sphinxsearch.com/files/sphinx-2.0.9-release.tar.gz

cd sphinx-2.0.9-release
./configure
make

libsphinx.a(sphinx.o): In function `xmlUnknownEncoding':
/root/install/sphinx-2.0.9-release/src/sphinx.cpp:22846: undefined reference to `libiconv_open'
/root/install/sphinx-2.0.9-release/src/sphinx.cpp:22864: undefined reference to `libiconv'
/root/install/sphinx-2.0.9-release/src/sphinx.cpp:22870: undefined reference to `libiconv_close'
collect2: выполнение ld завершилось с кодом возврата 1

Как побороть ошибку “collect2: ld completed with a return code 1” ?

замена:
LIBS = -lexpat -ldl -lm -lz -L/usr/local/lib -lrt -lpthread
на
LIBS = -lexpat -liconv -ldl -lm -lz -L/usr/local/lib -lrt -lpthread
помогла!

make
make install

[2] Настройка sphinx на centos 5

на всякий случай скопируем оригинальные конфиги:
cd /usr/local/etc
cp -i sphinx-min.conf.dist sphinx-min.conf.dist.copy
cp -i sphinx.conf sphinx.conf.copy

настроим конфигурацию под свою базу данных
nano /usr/local/etc/sphinx.conf

создадим папки, перечисленные в конфиге (иначе получим ошибки… 🙂 )
mkdir /home/user/sphinx_data/
mkdir /var/log/sphinx/

запускаем процесс
searchd --config /usr/local/etc/sphinx.conf

проверим, что служба на нужных портах работает
lsof -i tcp:9312
lsof -i tcp:9306

проверим, что создались лог-файлы:
ls -lh /var/log/sphinx/

Полезные команды для службы поиска sphinx

создать индекс:
indexer --config /usr/local/etc/sphinx.conf --all

обновить индекс:
indexer --config /usr/local/etc/sphinx.conf --rotate

тест поиска в консоли:
search -q --config /usr/local/etc/sphinx.conf -a 123
или проще:
search -q 123
Для того, чтобы использовать поиск на сайте, нужно использовать Sphinx API для PHP.
Это библиотека, поставляемая вместе с дистрибутивом. Находим, где он лежит:
locate sphinxapi.php
<?php
.....
// Подключаем sphinx-api
require_once ("sphinxapi.php");
.....
?>

Добавим в крон ротацию каждые 15 минут (путь indexer указываем полный, так как крон обычно не в курсе, где искать исполняемые файлы):
*/15 * * * * /usr/local/bin/indexer --config /usr/local/etc/sphinx.conf --rotate > /dev/null 2>&1

[3] Как сделать, чтобы при перезагрузке стартовал searchd (sphinx)?

1) Красивый метод – как описано в статье.

2) Простой метод – в кроне каждую минуту проверять, запущен ли searchd и запускать, в случае необходимости. Критерий – проверка существование pid-файла:
* * * * * if [ ! -f /var/log/sphinx/searchd.pid ]; then /usr/local/bin/searchd --config /usr/local/etc/sphinx.conf; fi > /dev/null 2>&1

 

Update, 21.12.2016: Эти настройки Sphinx подходят для версий 1.x, чтобы узнать, как поставить и настроить версии Sphinx 2.x читайте: Установка Sphinx 2.2.11 на Debian и CentOS, а также настройка в Yii

Как зашифровать бэкап и выгрузить его по ftp или sftp?

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

Зашифруем файл с помощью команды openssl

openssl aes-256-cbc -salt -in файл -out файл.aes -k пароль
(есть в большинстве дистрибутивов Linux, а также можно установить в windows и mac os)
Чтобы запрашивал пароль, нужно убрать “-k пароль”.
Расшифровать можно командой
openssl aes-256-cbc -d -salt -in файл.aes -out файл -k пароль

 

Как выгрузить на ftp (с помощью curl лучше всего)

curl -s -T файл -u пользователь:пароль ftp://фтпсервер

 

Как выгрузить файл на sftp

rsync -avz -e ssh пользователь@пароль:/удалённая/папка/ /текущая/папка/файл

 

Как выгрузить на sftp с помощью curl

короткий ответ – используйте rsync over ssh и не мучайтесь 🙂

Страницы:12