Category Archive: Скрипты

Бэкапирование

В прежние времена я часто занимался автоматизацией бэкапирования, т.е. создания резервной копии баз данных, файлов и т.д.. Сейчас таких задач у меня не возникает, но все же решил написать о том, как писать такие скрипты. Перечислим базовые шаги алгоритма скрипта:
  1. Выбрать директорию, где храняться резервные копии
  2. Снять резервную копию базы данных
  3. Сжать файлы с помощью архиватора и присвоить удобное наименование архиву
  4. Добавить скрипт в планировщик и установить время и периодичность запуска
Рассмотрим версии скрипта для Windows и для Linux.

Генерация Java-классов Web-сервиса по WSDL

Допустим, у вас есть WSDL и вы хотите написать либо сам веб-сервис, либо клиента для сервиса. Для этого по WSDL нужно сгенерировать Java-классы с помощью утилиты wsimport, входящую в состав JDK. Стоит отметить, что сгенерированный код может использовать и на сервере, и на клиенте. Создайте новую папку и положите в нее вашу WSDL и всё, что к ней относится (это может быть другие WSDL или XSD). Увидеть все, что импортирует ваша основная WSDL можно в теге import. Например:
<xsd:import namespace="http://www.kesh.kz/blog/v1" 
schemaLocation="http://123.45.678.90:8080/kesh/example.xsd"/>
В данном примере следует заменить интернет адрес XSD на локальный:
<xsd:import namespace="http://www.kesh.kz/blog/v1" 
schemaLocation="example.xsd"/>
Разумеется, файл example.xsd должен лежать c WSDL в одной директории. Теперь напишем скрипт для генерирования классов. Рассмотрим сперва Windows-версию скрипта, а потом Linux-версию. Скрипт для Windows Создайте файл w-gen.bat в любом текстовом редакторе и скопируйте в него следующий код:
cls
set GEN_DIR=kz
rmdir %GEN_DIR% /s/q
"%JAVA_HOME%/bin/wsimport" -keep -Xnocompile -p kz.kesh.blog.v1 myBlog.wsdl
pause
cls - очистка консоли GEN_DIR - директория пакета верхнего уровня rmdir - полное удаление директории wsimport - утилита для генерации Java-классов из WSDL keep - сохраняет сгенерированные файлы Xnocompile - не компилирует сгенерированные Java-файлы kz.kesh.blog.v1 - имя пакета, в котором будет сгенерированые классы myBlog.wsdl - наша WSDL pause - пауза, чтобы консольное окно сразу не закрылось Данный скрипт генерирует *.java файлы, но вы можете немного переработать скрипт и генерировать скопилированные файлы *.class. Так же вы можете доработать упаковку файлов и WSDL в jar. Например:
"%JAVA_HOME%/bin/jar" cf keskBlog.jar kz
jar - стандартная утилита из JDK для создания jar-файлов cf - создает новый архив с указанным именем keskBlog.jar - имя вашего jar-файла kz - директория, которая упаковывается в jar, она соответствует названию верхнего пакета Скрипт для Linux Создайте файл w-gen.sh:
#!/bin/bash
GEN_DIR="kz"
rm -r $GEN_DIR
wsimport -keep -Xnocompile -p kz.kesh.blog.v1 myBlog.wsdl
Не забудьте дать скрипту права на выполенение:
chmod +x w-gen.sh
#!/bin/bash - обязательная строчка для bash-скриптов GEN_DIR - директория пакета верхнего уровня rm - рекурсивное удаление директории wsimport - утилита для генерации Java-классов из WSDL keep - сохраняет сгенерированные файлы Xnocompile - не компилирует сгенерированные Java-файлы kz.kesh.blog.v1 - имя пакета, в котором будет сгенерированы классы myBlog.wsdl - наша WSDL

Создание резервной копии директорий (WinRAR)

Иногда возникает необходимость в создании полной резервной копии какой-нибудь директории. Можно, конечно, каждый раз вручную архивировать папку, присваивая название архиву и проставляя номер или дату резервной копии. Но это быстро надоедает. Предлагаю написать скрипт(bat), который будет автоматизировать эту работу. Допустим, есть директория D:\Projects\ProjectX, для которой нужно сделать резервную копию, заархивировав WinRAR'ом. Название архива будет содержать, кроме названия, еще и дату создания. Для этого нужно выполнить следующие шаги:
  1. Создадим любым текстовым редактором файл с названием projectx.bat. Желательно создать специальную директорию для хранения подобных скриптов (Например, D:\Scripts\backups)
  2. Вставьте следующий код в файл
    cls
    set rar="C:\Program Files\WinRAR\Rar.exe"
    set source_dir="D:\Projects\ProjectX"
    set backup_dir="D:\Backup\ProjectX\projectx_"
    %rar% a -r -ep1 -agYYYY-MM-DD[HHMM] %backup_dir% %source_dir%
    cls - необязательная команда, которая очищает консоль
  3. Переменная rar хранит полный путь к утилите rar.exe Переменная source_dir хранит полный путь к директории, для которой создается резервная копия Переменная backup_dir содержит путь до директории, где хранятся резерный копии(D:\Backup\), поддиректории (ProjectX) и префикса названия файла архива (projectx_) Теперь рассмотрим параметры архивирования, которые мы передаем утилите rar.exe: a - команда, указывающая на добавление файлов в архив -ep1 - опция, которая позволяет исключить базовый путь из имен файлов, но сохраняет внутреннюю иерархию директории -agYYYY-MM-DD[HHMM] - генерирует название файла на основе текущей даты и времени Последние два параметра передаваемые утилите - это путь до архива (backup_dir) и архивируемая директория (source_dir).
Теперь рассмотрим все в картинках: Директория для архивирования: pic1 Запускаемый скрипт: pic2 Директория с резервными копиями: pic3 Содержимое архива: pic4 Содержимое директории: pic5 Почему лучше использовать абсолютные пути в скрипте? Во-первых, это позволит хранить скрипты в одном месте, а резервные копии в другом. Во-вторых, можно запускать скрипты из любого места, не заботясь о текущей директории. Созданный нами скрипт можно запускать по мере необходимости или запускать планировщиком по расписанию. Если всё же решили использовать в скрипте относительные пути, то при создании задания в планировщике не забудьте указать рабочую директорию скрипта.