Блог вопиющего в пустыне
Дело в том, что у меня - серверная ось, а у пользователя на машине - windows 10. Были бы на обеих машинах серверные оси, и в их организации была бы не одноранговая сеть, а доменная, проблем бы не было: добавил бы соответствующие роли на серверах, запустил бы зеркалирование, и обошелся бы без всяких планировщиков. А тут пришлось для синхронизации использовать специальную утилиту SyncToy 2.1 от Microsoft. И запускать её через Планировщика заданий.
Кроме того, пользователь выдвинул обязательное условие: чтобы не было постоянно добавленного открытого элемента в сетевом окружении и постоянно подключенного сетевого диска, т.е., чтобы каждый раз для подключения к сетевому ресурсу на сервере ему надо было вводить логин и пароль.
Для подключения к серверу использовал bat-файл следующего содержания:
net use \\ip-адрес_сервера\сетевой_ресурс_на_сервере /PERSISTENT:NO /user:имя_пользователя пароль
Exit
где вместо "ip-адрес_сервера", "сетевой_ресурс_на_сервере", "имя_пользователя" и "пароль" были внесены реальные данные.
В Планировщик заданий загнал два действия:
1) запуск приведенного выше bat-файла,
2) запуск программы синхронизации SyncToyCmd.exe
Запустил задание на выполнение. И получил "Результат последнего запуска (0x1)", т.е. - "ни фига" не выполнилось. Расшифровка результата (0x1) - "вызов неверной или неизвестной функции".
Где-то в сети нашел подсказку, что если в Планировщике заданий на вкладке "Действие" для одного задания прописано выполнение более одной программы, то они запускаются одновременно, а не последовательно. Т.е. получается, что синхронизация запускалась, когда подключения к сетевому ресурсу ещё не было установлено, что и давало ошибку 0x1.
Решение проблемы.
Так как в пакетном файле команды выполняются последовательно, то в наш bat-файл записал обе команды: сначала на подключение сетевого ресурса, а потом - на запуск синхронизации.
net use \\ip-адрес_сервера\сетевой_ресурс_на_сервере /PERSISTENT:NO /user:имя_пользователя пароль
START "SyncToy" /WAIT "C:\Program Files\SyncToy 2.1\SyncToyCmd.exe" /R
net use \\ip-адрес_сервера\сетевой_ресурс_на_сервере /DELETE
Exit
И поместил его во вкладку Действие
Запустил на выполнение. В столбце "Результат последнего запуска" получил "Операция успешно завершена. (0х0)". Что и требовалось доказать.
P.S. В последнее время обратил внимание на возросшее количество просмотров данного поста. Решил проверить работу синхронизации SyncToy через Планировщик заданий. Там, вроде, всё нормально: в столбце "Результат последнего запуска" стоит "Операция успешно завершена. (0х0)". На всякий случай полез на сервер (куда "эхолировались" папки пользователя) и обнаружил, что вновь добавленные пользователем на его компьютере папки "нихрена" на сервере не появляются. Через Планировщик запустил синхронизацию вручную: результат - тот же. Вот "сцука"! И не понятно, в какой момент этот баг начался.
Начал "перелопачивать" опции Планировщика. И опять получил то, от чего когда-то, как мне думалось, с триумфом ушел: "шедулеровскую" хрень (0х1). Но, в конечном итоге, проблему решил. Помогли одновременно два, казалось бы, ни на что не должные повлиять изменения в Планировщике (если использовать только одно из двух, то не срабатывает).
1) Поменял учетную запись, используемую при выполнении задачи (у меня был "Администратор"). На вкладке "Общие" нажал "Изменить".
В окне "Выбор пользователя" нажал "Дополнительно" - "Поиск". В "Результатах поиска" выбрал "Администраторы". Нажал "ОК".
2) Добавил путь к папке, где находится мой bat-файл. На вкладке "Действия" нажал "Изменить". В окне "Изменение действий" в строке "Рабочая папка (необязательно)" ввел C:\Program Files\SyncToy 2.1\ (без кавычек). Нажал "ОК". Ещё раз "ОК".
Запустил Синхронизацию на выполнение. Отработала. В столбце "Результат последнего запуска" появилось уже (0х2).
Тем не менее, вновь созданные на компьютере пользователя папки появились на сервере. Поэтому, наплевать на (0х2) и забыть. Главное, что синхронизирует.
- Комментарии






