Показаны сообщения с ярлыком bash. Показать все сообщения
Показаны сообщения с ярлыком bash. Показать все сообщения

2016-09-08

Бэкап всех баз MySQL с ротацией (удалением старых) бэкапов

Скрипт делает дампы всех БД сервера, сохраняя в папки именованные по дате и времени создания. Сохраняются последние N (переменная $BACKUPS) бэкапов.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Optional variables for a backup script
MYSQL_USER="root"
MYSQL_PASS="password"
BACKUP_ROOT=/var/backups/mysql;
BACKUPS=2;
BACKUP_DIR="$BACKUP_ROOT/$(date +%Y-%m-%dT%H_%M_%S)";

# Create folders
test -d "$BACKUP_DIR" || mkdir -p "$BACKUP_DIR"
# Get the database list, exclude information_schema
for db in $(mysql -B -s -u $MYSQL_USER --password=$MYSQL_PASS -e 'show databases' | grep -v information_schema)
do
  # dump each database in a separate file
  mysqldump -u $MYSQL_USER --password=$MYSQL_PASS "$db" | gzip > "$BACKUP_DIR/$db.sql.gz"
done

# backup cleanup
ls "$BACKUP_ROOT" \
        | head -n$(expr $(ls "$BACKUP_ROOT" | wc -l) - $BACKUPS) \
        | while read in; 
                do rm -rf  "$BACKUP_ROOT/$in"; 
          done

2016-04-01

Простейший пингер с логированием под bash

Собственно пингуем, ведем лог и это все что надо )

#!/bin/bash

if [[ -z "$1" ]]; then
    echo "Please enter IP, ex.: $0 127.0.0.1"
    exit
else
    echo "Logfile: /tmp/ping_$1"
fi

while true
do
    
    while ! ping -c1 $1 &>/dev/null
 do echo "Ping Fail - `date`" >> /tmp/ping_$1
    done

    echo "Host Found - `date`" >> /tmp/ping_$1
    sleep 1
done

2016-03-08

Как по порядку переименовать файлы, скачанные wget по списку

Решил скачать комикс из вконтакта, полученный список (listfile.txt) для скачивания имел примерно такой вид:

https://pp.vk.me/c307313/v307313650/1e94/bj560KCwYY4.jpg
https://pp.vk.me/c307313/v307313650/1692/yFPMOuXHLvw.jpg
...
https://pp.vk.me/c307313/v307313650/1e7b/d-MXTKSZr34.jpg
https://pp.vk.me/c307313/v307313650/1e84/Oj_DhH9Fbvw.jpg

Собственно, после скачивания wget'ом (wget -i listfile.txt) я получил неудобоваримый набор файлов с рандомными названиями, и мне захотелось переименовать их в вид 001.jpg 002.jpg, согласно порядку, в котором они были в исходном файле. Хорошенько попотев, получил такой однострочник:

cat ./listfile.txt | tr -d  '\r' |  while read url; do n=$((n+1)); file="`echo $url| sed -e 's/.*\///'`"; newfile="`printf \"%03d\" $n`";  mv  ./"$file"  ./"$newfile".jpg ;  done


Или, для читаемости, так:

cat ./listfile.txt | tr -d  '\r' |  while read url; 
do 
    n=$((n+1)); 
    file="`echo $url| sed -e 's/.*\///'`"; 
    newfile="`printf \"%03d\" $n`";  
    mv  ./"$file"  ./"$newfile".jpg ;  
done

Немного пояснений:

tr -d  '\r'  - исходный файл у меня был виндовосформирован, поэтому в каждой строке там был лишний символ перевода коретки, который мешался

while read url - стандартный цикл построчного чтения файла в переменную url

n=$((n+1)) - переменная n для нового имени файлов, которая будет прирастать на единицу

file="`echo $url| sed -e 's/.*\///'`" - старое имя файла, которое получается путем обрезания левой части ссылки

newfile="`printf \"%03d\" $n`" - новое имя файла, которое состоит из переменной n сформатированной в трехсимвольное отображение (1,2,3 -> 001, 002, 003).

2009-05-13

Как в linux быстро и просто проверить, жив ли сервер?

Озаботился вопросом — как проверить на живость сервер и сервисы на нем? В моем случае это ряд цисок, файлсервера, да сервак Exchange. Разворачивать какую-то систему слежения там, где достаточно пинга да проверки портов, показалось слишком сложным. Бродя по инету наткнулся на довольно просто скриптец, использующий nmap для проверки открытых портов. Слегка попилив пришел к следующему:

#!/bin/bash
# оригинальный скрипт: http://habrahabr.ru/sandbox/2096/
#
# Для работы требуются: nmap, libnotify-bin. Также
# необходимо создать рядом со скриптом файлик "servers",

# содержащий инфу об интересующих серверах в виде
# IP:PORT COMMENT, например:
#
# 192.168.310.254:443 1й снизу в левой стойке
# 192.168.410.254:80 вторая стойка, 3й снизу
#

# хватаем по строчке из списка, выхватываем часть до комментария,
# преобразуем двоеточие в " -p " и подсовываем nmap'у. Если последний
# не находит открытый порт на айпишнике — айпишник с портом записываются
# в файл serverlist (создается рядом со скриптом)
#
cat servers | while read line; do nmap `echo "${line}" | awk '{print($1)}'| sed -e 's/:/ -p /'` | grep -q "/tcp *open" || echo "${line}"; done > serverlist;
#
# Если serverlist не пуст, скидываем инфу о времени
# и инфу из serverlist в файл log (создается рядом со скриптом)
#
if (!( [ -z $(cat serverlist) ])); then
echo $DATENOW >> log
cat serverlist >> log
#
# для каждого айпишника из serverlist находится полная строка
# в servers (с комментарием). В начало каждой втыкается
# смайлег ಠ_ಠ, а в конце делается дополнительный перенос.
# Все это ложится в файл serverlist1, содержимое которого
# отправляется как системное уведомление.
#
cat serverlist| while read megaline; do grep "${megaline}" "servers"| sed -e 's/^/ಠ_ಠ /' | sed -e 's/$/\n/' ; done > serverlist1;
notify-send --expire-time=100000 АТАС-АТАС!! "`cat serverlist1`"

fi
exit

Итого: легко и просто пиная скрипт cron'ом, мы проверяем живы ли наши сервера, и в случае абзаца наблюдаем в трее кто потерялся.

ЗЫ: А для раскраски синтаксиса был использован сервис http://highlight.hohli.com/