среда, 12 октября 2016 г.

Бэкап данных средствами Windows, с использованием .cmd скриптов и архиватора

Системные администраторы делятся на тех, кто не делает бэкапы, и тех, кто УЖЕ делает...


Я хоть и "бессистемный" администратор, но бэкапом данных озадачен. На настоящие enterprise-решения у нас не хватает ни денег, ни знаний, ни времени, чтобы разобраться, поэтому "велосипедим" из того, что под руку попадётся. Скрипты для бэкапа я сочинил уже довольно давно, но периодически к ним возвращаюсь - что-то переделываю, исправляю ошибки. Веду работу над продуктом, как будто я настоящий программист :-)

Не так давно вылезла очередная проблема с моей системой бэкапа - слишком большие объёмы данных по сети гоняются. Полез разбираться, почему же так происходит. Оказалось, сам виноват, не думал, как компьютер, когда писал. У меня архивы делал программа nnBackup, которая очень хорошая, если делать бэкапы на локальный диск. Она сама умеет их нумеровать, хранит столько пронумерованных копий, сколько скажешь, лишние сама же и удаляет. И вот как раз здесь собака и порылась - у меня на сервер каждый день копировались ВСЕ архивы. А я думал, что будет только один, самый новый. Говорю же - думал, как человек, а не как компьютер.

Поэтому на днях взялся всё переписывать по новой, выкинул nnBackup, оставил простой архиватор 7zip. Архивы теперь не нумеруются, просто в имени записывается дата и время создания архива. Пришлось придумать как удалять старые архивы, оставляя только определённое количество. В общем, было достаточно увлекательно.

Вчера утром избавился от последней критческой ошибки, гонял всячески на виртуальной машине с тренировочным сервером внутри. Попутно дописал ещё несколько мелочей. Чувствую себя прям программистом :-)

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

четверг, 18 августа 2016 г.

Отложенный запуск программ в Windows

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

Можно, конечно, сделать, что называется, в лоб. То есть прямо в скрипте поочерёдно вызывать нужные программы, вставляя между ними требуемую задержку. Но так же не интересно.

Поэтому решил, что нужно разнести программную и конфигурационную части по разным файлам. Как будто я настоящий программист, а не .cmd файл в винде пишу :-)

Задуманное у меня получилось совсем не сразу, поскольку "я же не настоящий сварщик". Но получилось.

Итак, в файлик, скажем, app_list.txt пишем как-то так:

10;"C:\Program Files\7-Zip\7zFM.exe"
20;"C:\Program Files\IrfanView\i_view64.exe"


Числа - это время задержки, после которого запустится программа. Приблизительно, в секундах. На самом деле - количество пингов на "пустой" адрес. После точки с запятой в кавычках пишем полный путь к запускаемой программе. Вот такой файл конфигурации.

Сам скрипт тоже не очень большой:

@ECHO OFF

SETLOCAL
SET APP_LIST=%~dp0\app_list.txt


FOR /F "tokens=1,2 delims=;" %%i in (%APP_LIST%) DO (
ping -n %%i 127.0.0.1 2>&1>NUL
START "" %%j
)

:END


Три строчки.

Первая строка в цикле читает из файла конфигурации параметры. ключ "tokens=1,2" говорит, что из каждой строки выбирается две подстроки. Ключ "delims=;" говорит, что разделителем подстрок служит точка с запятой.

Вторая строчка служит для задержки перед запуском программы из списка. Пингует localhost столько раз, сколько указано в строке конфигурации, до точки с запятой. Каждый пинг - примерно секунда. Так что можно считать, что задержку указываем в секундах.

Третья строчка, собственно, запускает программу.

И так в цикле пробегается весь список. Красота нечеловеческая! :-)

И вот что хочется сказать напоследок. Для подобной задачи, сделать отложенный запуск программ, которая делается в несколько строчек на встроенном скриптовом языке Windows, пишутся специальные утилиты! Ну, например, Startup Delayer. Там, конечно, интерфейс, кнопочки, все дела... Но ТРИ СТРОЧКИ .cmd файла!

вторник, 29 марта 2016 г.

Настройка сети на удалённом компьютере через командную строку

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

Иногда бывает нужно сделать что-то на удалённом компьютере, но так, чтобы не мешать пользователю, не отнимать у него управление компьютером. Одна из таких задач - изменение сетевых параметров. Её вполне возможно выполнить из командной строки, со своего ПК, так что пользователь ничего не увидит на своём экране.

Для этого понадобится иметь на своём компьютере пакет утилит SysinternalsSuite, из которого будет использоваться утилита PsExec, позволяющая запускать процессы на удалённом ПК.

Если SysinternalsSuite до сих пор ещё не было на вашем ПК, то его нужно скачать, распаковать архив, запустить командный интерпретатор Windows cmd, и выполнить несколько команд:

psexec -u Администратор -p password \\192.168.0.15 netsh interface ip set address name="Подключение по локальной сети" source=static addr=192.168.0.15 mask=255.255.255.0 gateway=192.168.0.1 gwmetric=1

Значения ключей команды:

  • -u - имя пользователя, от которого будет запускаться команда на удалённом компьютере (Администратор);
  • -p - пароль;
  • \\192.168.0.15 - IP-адрес компьютера, к которому выполняется подключение;
  • netsh interface ip set address - а это уже команда со своими параметрами, которая будет исполняться на удалённом компьютере, установка параметров IP (для Windows 7 вместо netsh interface ip set address будет netsh interface ipv4 set address);
  • name="Подключение по локальной сети" - имя сетевого подключения. Может отличаться от указанного в примере, поэтому надо уточнять. Сделать это можно через Radmin, только выбрать подключение "Telnet". Откроется чёрное окошко с командной строкой, в котором выполнить команду ipconfig /all. Или с помощью того же PsExec: psexec -u Администратор -p password \\192.168.0.15 ipconfig /all
  • source=static - указывает, что будет назначен статический IP-адрес;
  • addr=192.168.0.15 - собственно, IP-адрес;
  • mask=255.255.255.0 - маска;
  • gateway=192.168.0.1 - шлюз;
  • gwmetric=1 - метрика шлюза.


Эта команда не задаёт адреса DNS-серверов. Для добавления/изменения DNS нужно выполнить следующие команды.

Указать DNS-сервер:

psexec -u Администратор -p password \\192.168.0.15 netsh interface ip set dns name="Подключение по локальной сети" source=static addr=77.88.8.88

Добавить ещё один DNS-сервер:

psexec -u Администратор -p password \\192.168.0.15 netsh interface ip add dns name="Подключение по локальной сети" addr=8.8.8.8

пятница, 11 марта 2016 г.

А где у него кнопка?

Обычно я компьютеры и компьютерные проблемы чиню, но сегодня было какое-то такое настроение, что я взял и переметнулся на другую сторону. Но я же не простой пользователь, я, пусть бессистемный, но администратор, я сломал целый сервер! Два раза!

Вообще-то, конечно, ничего такого я не планировал, как оно обычно и бывает. "Я ничего не трогал, оно само". Сервер нужно было срочно перезагрузить, скрипт почему-то (я потом выяснил почему) не сработал, пришлось лезть в командную строку и набирать команды руками. И вот в этот момент торопиться не стоило! Но как же нам не торопиться, не спешить от разных бед? Весь магазин же стоит, все же нервничают, и я вместе с ними. Вот и набрал в команде вместо "/r" (перезагрузка) "/s" (выключение). А компьютер же что? Он железный. Ему сказали выключиться, он выключился. Ну не умеют нынешние компьютеры понимать, что я не то имел в виду! :-)

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

Но закончилось всё хорошо. Я жив, меня даже не побили. Сервер (железный) включили заново, виртуалка благополучно стартовала, всё заработало, всё счастливы. Но осадочек остался.

суббота, 20 февраля 2016 г.

Чем компьютер отличается от табуретки

Пока я две недели был в отпуске, мой рабочий компьютер успел за это время десять раз вылететь в так называемый "синий экран смерти" с разного рода ошибками. В один из дней аж четыре раза! Я пока не могу понять, чего ему в этой жизни не хватает для счастья. По любой ошибке находится столько вариантов возможных причин её возникновения, что проще ответить: "А фиг его знает, почему." Возможно неисправности оборудования, устаревший драйвер или новое аппаратное или программное обеспечение. Вот и пойми. Не, с табуретками всё гораздо проще - если табуретка вчера ещё надёжно стояла, а сегодня вдруг стала падать, значит отломилась ножка. А тут...

Память я проверил, диски стандартными средствами Windows тоже протестировал. Надо бы ещё углублённые тесты прогнать, наверное. И потом, если ничего не обнаружится, переустановить винду и отказаться от порочной практики ставить разные хитрые программки "на попробовать". Есть у меня подозрение, что всякие оптимизаторы и чистильщики реестра, вроде System Mechanic-а как раз таки могли поспособствовать.

С другой стороны, переустановка всего - это такой геморрой! Это же опять всё кропотливо под себя настраивать, права для пользователей и общих каталогов выставлять. Нет, ну вот чего ему не хватало?!