Назад | Перейти на главную страницу

Почему для запланированных задач Windows нужен «запуск»?

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

Задача запланирована с использованием schtasks в процессе установки, например:

Это всегда работало как под W2003, так и под W2008. Неделю назад клиент сообщил, что запланированные задачи не выполняются. Он работает под управлением Windows 2008. Мы проверяли снова и снова и наконец решили проблему, указав папку, содержащую сценарий .vbs, в качестве папки «запуск в» для запланированной задачи.

При этом невозможно установить значение "начать через ..." из schtasks без использования XML-определения задач. Определения XML не работают в Windows 2003, поэтому мне пришлось бы добавить в установщик определение версии Windows, дополнительное тестирование и т. Д. (Я бы хотел избежать этого, если это вообще возможно).

Единственная нетипичная вещь, которую я заметил при установке, - это то, что система установлена ​​в D:\ в отличие от значения по умолчанию C:\Program Files (x86)\, но я не понимаю, какое это имеет значение. Во всех скриптах все пути абсолютны.

Может ли кто-нибудь предложить разумное решение для этого?

«Начало в» в основном предназначено для того, чтобы убедиться, что если у вас есть относительные пути в задаче для запуска, она понимает, в каком каталоге запускать сценарий.

Тем не менее, эта ссылка может вам помочь: https://stackoverflow.com/questions/1020023/specifying-start-in-directory-in-schtasks-command-in-windows

Решение чего именно?

В start in value - это именно то, на что похоже, каталог, в котором запускается приложение / программа / скрипт. Это имеет значение, когда он вызывает другие ресурсы. Если он звонит somecustom.exe это не в этом start in каталог, он не будет найден, и ваше приложение / программа / скрипт выдаст ошибку. Если вы вызываете абсолютно все по пути, это не имеет значения, но поведение, которое вы описываете, похоже, указывает на то, что на самом деле этого не происходит, поэтому вы можете попытаться исправить это поведение или быстрое решение (если уродливое и некрасивое дерьмовое решение для правильного ввода кода) добавило бы каталог в %PATH% переменная, поэтому Windows всегда будет проверять каталог при вызове исполняемого файла без указания пути.

Если вы работаете в Windows 2008/7 / Vista, вы также можете используйте переключатель, установите start in каталог с schtasks /v1, пока вы не пытаетесь запускать задачи под SYSTEM учетная запись. Думаю, я бы предпочел, чтобы разработчик отлаживал свой код, но YMMV.