Резервное копирование на Yandex диск

Приведу пример скрипта для создания резервных копий на Yandex диск.

Читать далее «Резервное копирование на Yandex диск»

Скрипт архивирования файлов за прошлый месяц

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

Читать далее «Скрипт архивирования файлов за прошлый месяц»

Скрипт резервного копирования конфигурации DOCSIS ARRIS Cadant C3 CMTS

Собственно вот мой скрипт:

#!/bin/bash
# Backup DOCSIS CADANTS config
(
sleep 5
echo "user"
sleep 5
echo "password"
sleep 5
echo "enable"
sleep 2
echo "password"
sleep 2
echo "copy startup-configuration tftp://192.168.0.1/cadant1.xml"
sleep 5
echo "exit"
) | telnet 192.168.0.50
mv /srv/tftp/cadant1.xml /backups/devices/docsis/`date +%Y-%m-%d`_cadant1.xml

Где 192.168.0.50 — cadant, 192.168.0.1 — tftp сервер.

Вы можете добавить скрипт в /etc/crontab для автоматического выполнения (например, каждый день в час ночи):

0 1 * * * root /path/to/script/backup_cadants.sh > /dev/null 2>&1

Выполнение SQL запроса из скрипта в Linux

Понадобилось недавно написать скрипт выполняющий sql запрос в базу MySQL.
Пример содержимого:

# Описание, тут я написал для других что скрипт добавлен в crontab, дабы его не переместили
mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -h 127.0.0.1 -e "UPDATE nika_system.abon SET otkl=0 WHERE depozit > '10' AND (otkl='-1' OR otkl='-2');";

Чтобы скрипт выполнялся автоматически, откроем в любом текстовом редакторе файл crontab (в редакторе nano CTRL+X для выхода и y/n для сохранения или отмены изменений):

sudo nano /etc/crontab

Добавим в него следующую строку:

0 9 * * * root /home/nika/scripts/reset_credit_nika.sh > /dev/null 2>&1

Теперь ежедневно в 9 утра скрипт будет выполняться.

Приведу пример ежедневного автоматического вывода данных из sql таблицы в текстовый файл:

#!/bin/bash
mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -h 192.168.1.1 -s -N -e "SELECT id FROM nika_system.abon WHERE tarif=109;";

В /etc/crontab добавим:

0 8 * * * root /scripts/freektb.sh > /srv/samba/dir/mirazh/$(date +%Y-%m-%d).txt

В целях безопасности лучше не указывать пароль в скриптах, смотрите мою статью — Подключение к MySQL из localhost без ввода пароля

Как преобразовать список IP-адресов в DNS-имена

В Linux преобразовать список IP-адресов в DNS-имена можно например простеньким скриптом.

Для этого создадим пустой файл с расширением .sh, сделаем его исполняемым и добавим в него содержимое:

#!/bin/sh
while read ip traf ; do
    name=`host $ip|awk '{print $NF}'`
    echo -e "$name\t$ip\t$traf"
done >name_ip_traf.lst <ip_traf.lst

Где ip_traf.lst — файл со списком IP-адресов которые необходимо преобразовать в DNS-имена.

Исполняемым его можно сделать командой:

chmod +rwx file.sh

Запускать скрипт необходимо находясь в директории где он находится командой:

./file.sh

Или запустить указав полный путь:

/dir/file.sh

После запуска необходимо подождать некоторое время либо оборвать выполнение комбинацией клавиш CTRL+C.

Bash скрипт перезагрузки оборудования через telnet

Заметил что некоторое дешевое управляемое оборудование, может через несколько дней или недель начать некорректно работать, поэтому возникла идея написать скрипт перезагрузки и добавить его в cron.

Содержимое скрипта:

#!/bin/bash
(
sleep 5
echo "admin"
sleep 5
echo "password"
sleep 5
echo "reboot"
sleep 5
echo "y"
sleep 5
echo "quit"
) | telnet 192.168.1.10

sleep 5 означает паузу в 5 секунд после каждой команды, это значение оптимально для долго думающего оборудования. К примеру для клиентских коммутаторов D-Link DES-3200 паузу можно вовсе убрать или выставить 1.

Смотрите также:
Использование и настройка CRON

Скрипт удаления старых файлов

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

Читать далее «Скрипт удаления старых файлов»

Как вытащить данные из одного столбца mysql таблицы

Чтобы увидеть данные из одно столбца, достаточно выполнить SQL запрос (где «abcd» — имя столбца в таблице):

SELECT abcd FROM table;

Для экспорта в файл достаточно выполнить команду в Linux:

mysql -u root -e "SELECT abcd FROM database;" -s -N > file.txt

Приведу пример экспорта email адресов из mysql таблицы на http страницу используя PHP.
Мысль сразу пришла такого плана (создаем php файл и открываем его через браузер):

<?php
// Соединяемся с mysql сервером
mysql_connect("localhost", "USER", "PASSWORD") or die (mysql_error ());
// Выбираем базу данных
mysql_select_db("users") or die(mysql_error());
// SQL-запрос
$rows = "SELECT * FROM account";
// Выполняем этот SQL-запрос
$d = mysql_query($rows);
// Каждый ряд становится массивом ($row) с помощью функции mysql_fetch_array
while($row = mysql_fetch_array($d)) {
// Выводим значения столбца email
echo $row['email'] . "<br />";
}
// Закрываем соединение с базой данных
mysql_close();
?>

Вариант резервного копирования в Windows (winrar+bat)

Вариант резервного копирования файлов с помощью winrar в Windows:

Создадим файл с расширением *.bat и добавам в него содержимое:

set rar_path="C:\Program Files\WinRAR\rar.exe"
set backup_path=D:\Backup\
set archive_name=backup-file_all -ag_DD.MM.YYYY
%rar_path% a -r -m2 -dh -ow -ppassword %backup_path%%archive_name% D:\files\*.*

Или можно указать список файлов и категорий для архивирования в текстовом файле:

set rar_path="C:\Program Files\WinRAR\rar.exe"
set backup_path=D:\Backup\
set archive_name=backup-file_all -ag_DD.MM.YYYY
set backup_list=@D:\Backup\backuplist.txt
%rar_path% a -r -m2 -dh -ow -ppassword %backup_path%%backup_list%%archive_name%

Ключи winrar:
-ac Снять атрибут «архивный» после архивации или извлечения
-ad Добавить к пути назначения имя архива
-af Указать формат архива
-ag[формат] Добавить к имени архива текущую дату и время
-ao Добавить файлы с установленным атрибутом «архивный»
-ap Установить путь внутри архива
-as Синхронизировать содержимое архива
-av Добавить электронную подпись
-av- Запретить добавление/проверку электронной подписи
-cfg- Игнорировать профиль по умолчанию и переменную окружения
-cl Преобразовать имена файлов в нижний регистр
-cu Преобразовать имена файлов в верхний регистр
-df Удалить файлы после архивации
-dh Открывать совместно используемые файлы
-ds Не сортировать файлы при архивации
-ed Не добавлять пустые папки
-en Не добавлять блок «конец архива»
-ep Исключить пути из имён
-ep1 Исключить из пути базовую папку
-ep2 Сохранять полные пути файлов
-ep3 Сохранять полные пути, включая букву диска
-e[+] Задать исключение или включение файлов из/в обработку по маске атрибутов
-f Освежить имеющиеся файлы
-hp[пароль] Шифровать и данные, и заголовки файлов
-iadm Запрашивать административный доступ для SFX-архива
-ibck Запустить WinRAR как фоновый процесс в системном лотке
-ieml[.][адрес] Отправить архив по электронной почте
-iicon<имя > Указать значок для SFX-модуля
-iimg Указать логотип для SFX-модуля
-ilog[имя] Записывать протокол ошибок в файл
-inul Не выводить сообщения об ошибках
-ioff Выключить компьютер
-k Заблокировать архив
-kb Сохранять на диске файлы, извлечённые с ошибками
-m Установить метод сжатия
-mc Указать дополнительные параметры сжатия
-md Установить размер словаря
-ms[список] Указать типы файлов для архивирования без сжатия
-mt Установить число потоков
-n Включить в обработку только указанный файл
-n@ Включить в обработку только файлы, указанные в файле-списке
-oc Установить NTFS-атрибут «сжатый»
-or Переименовывать файлы автоматически
-os Сохранить потоки NTFS
-ow Обработать информацию о правах доступа к файлам
-o+ Перезаписывать существующие файлы
-o- Не перезаписывать существующие файлы
-p[пароль] Установить пароль
-r Обрабатывать вложенные папки
-r0 Обрабатывать вложенные папки по шаблону
-ri Установить приоритет и время простоя
-rr[N] Добавить информацию для восстановления
-rv[N] Создать тома для восстановления
-s Создать непрерывный архив
-sc[объекты] Указать набор символов (и объекты)
-se Создать непрерывные группы, используя расширения файлов
-sfx[имя] Создать самораспаковывающийся архив
-sl Обрабатывать файлы размером меньше указанного
-sm Обрабатывать файлы размером больше указанного
-sv Создать независимые непрерывные тома
-sv- Создать зависимые непрерывные тома
-s- Запретить создание непрерывных архивов
-t Протестировать файлы после архивирования
-ta Обрабатывать файлы, изменённые после указанной даты
-tb Обрабатывать файлы, изменённые до указанной даты
-tk Сохранять исходное время архива
-tl Установить время архива по самому новому файлу
-tn Обрабатывать файлы не старее, чем указанный период времени
-to Обрабатывать файлы более старые, чем указанный период времени
-ts Сохранить/восстановить время файлов (модификации, создания, последнего доступа)
-u Обновить файлы
-v[k |b|f|m|M|g|G] Создать многотомный архив
-vd Очищать сменный диск перед архивацией на него
-ver[n] Управление версиями файлов
-vn Использовать старую схему именования томов
-vp Делать паузу перед каждым томом
-x<файл > Не обрабатывать указанный файл
-x@<файл-список > Не обрабатывать файлы, указанные в файле-списке
-y Подразумевать ответ «Да» на все запросы
-z Прочитать комментарий архива из файла
— Прервать дальнейший поиск ключей в командной строке

Рестартер TrinityCore под Linux

Приведу пример примитивного рестартера TrinityCore под Linux:

Создаем первый файл auth.sh с содержимым:

#!/bin/bash
while :; do
/home/trinity/release/bin/authserver -c /home/trinity/release/etc/authserver.conf
sleep 10
done

По нему будет запускаться сервер идентификации. Если он работает без ошибок, то в /etc/rc.local можно прописать путь к этому файлу, чтобы он грузился при запуске системы.

Создаем второй файл world.sh с содержимым:

#!/bin/sh
logfile='/home/trinity/release/bin/logs/shserver.log'
srvrun='/home/trinity/release/bin/worldserver'
srvname=worldserver
outfile='/home/trinity/release/bin/logs/crash.log'
 
 
if [ `ps ax | grep "$srvrun" | grep -v "grep" | wc -l` = 0 ]; then
   kill `ps xu | grep "$srvname" | grep "$srvrun" | grep -v "grep" | awk '{print $2}'`
   echo "Server CRASHED !!! Start Bugreport System" `date` >> $outfile
   echo "Server.log Log FILE Last 30 Lines:" >> $outfile
   cat $logfile | tail -n 30 >> $outfile
   echo "END bugtracker system." >> $outfile
   sleep 20 && $srvrun
fi
exit 0

По нему будет запускаться игровой сервер. Запускать можно через screen командой:

screen -AmdS world /home/trinity/release/bin/world.sh