четверг, 9 июля 2015 г.

Как поймать призрака в консоли

console.png

У меня на работе есть несколько серверов, с которых нужно регулярно, лучше ежедневно, делать архивные копии. Я почему-то решил не использовать для этого разные программы вроде Backup32 и Cobian Backup, а написать свой "велосипед". Правда, программист из меня как из подушки ракета, поэтому я написал не то чтобы прям программу, я написал довольно несложный скрипт, cmd-файл, который делает всё, что мне нужно. Даже умеет отправлять на электронную почту письма с результатами своей работы.

И вот с недавних пор один из серверов начал себя вести как-то странно. Сначала он мне присылал три письма о том, что архивация баз завершилась неудачно, на сетевом диске архив не обнаружен. Все три письма были отправлены в одно и то же время, в 3:02. Затем, скажем, в 3:07, 3:15 и 3:28 приходили письма, что всё хорошо. Я всю голову изломал, что же случилось, почему всё работало и вдруг перестало. Ну, не совсем перестало, а стало работать странно. Потому что СНАЧАЛА скрипт должен сделать архивы, а это время, и только ПОСЛЕ проверить наличие архива на сетевом диске. А у меня получалось, что сначала проверка, отправка письма об ошибке, затем архивация, снова проверка и отправка писем, что всё хорошо.

Какое-то время я на это внимания особо не обращал, потому что архивы всё-таки делались, пусть и со странностями. Да и времени свободного на разбирательства, если честно, не хватает. У нас всё бегом-бегом, починили, что совсем уж сломалось, побежали дальше. А тут вроде как работает же. Но вчера всё решил попробовать разобраться, с какого перепуга оно так стало вести себя таким странным образом.

Одним из предположений было, что по непонятной причине запускается два экземпляра скрипта, и из-за этого возникает "конфликт интересов". Это, кстати, не я такой умный, это мне на жулике подсказали. Поэтому я полез в планировщик и перенёс запуск задания с трёх ночи на два часа. С мыслью, что если я не вижу, откуда запускается второй экземпляр, если он есть, то и время его запуска изменить не смогу. Так что, если заданий два, то и писем я получу в два раза больше - и в два часа, и в три.

В общем-то, так и вышло. Двухчасовое задание прислало свои три письма, последовательно, все три письма об успешном завершении. А в 03:02 пришло ОДНОВРЕМЕННО ещё три письма, что... Всё хорошо! И тут я решил посмотреть, а откуда, собственно, письма приходят?

Результат был... Скажем так, неожиданный. Оказывается, второй экземпляр задания запускался совсем на другом сервере, на котором совсем другая база крутится. А скрипт запускался всё тот же, что и на первом сервере. Поэтому он, естественно, ничего не находил, не архивировал и мгновенно отправлял три письма с ошибкой. А "правильный" сервер в это время пыхтел, архивировал данные и, когда всё заканчивал, отправлял свои письма, что всё хорошо. О как!

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

Теперь всё вроде поправил, на втором сервере прописал правильные параметры скрипту. Завтра посмотрю на результат.

Комментариев нет :

Отправить комментарий