Jak skonfigurować i uruchomić zadania uruchamiania dla usługi Azure Cloud Service (klasycznej)

Ważne

Usługi Cloud Services (wersja klasyczna) są teraz przestarzałe dla nowych klientów i zostaną wycofane 31 sierpnia 2024 r. dla wszystkich klientów. Nowe wdrożenia powinny używać nowego modelu wdrażania opartego na usłudze Azure Resource Manager w usługach Azure Cloud Services (wsparcie dodatkowe).

Zadania uruchamiania umożliwiają wykonywanie operacji przed rozpoczęciem roli. Operacje, które można wykonać, obejmują instalowanie składnika, rejestrowanie składników modelu obiektów składników (COM), ustawianie kluczy rejestru lub uruchamianie długotrwałego procesu.

Uwaga

Zadania uruchamiania nie mają zastosowania do maszyn wirtualnych, tylko dla ról sieci Web i procesu roboczego usługi w chmurze.

Jak działają zadania uruchamiania

Zadania uruchamiania to akcje wykonywane przed rozpoczęciem ról. Plik ServiceDefinition.csdef definiuje zadania uruchamiania przy użyciu elementu Task w elemecie Startup . Często zadania uruchamiania to pliki wsadowe, ale mogą to być również aplikacje konsolowe lub pliki wsadowe uruchamiające skrypty programu PowerShell.

Zmienne środowiskowe przekazują informacje do zadania uruchamiania, a magazyn lokalny może służyć do przekazywania informacji z zadania uruchamiania. Na przykład zmienna środowiskowa może określić ścieżkę do programu, który chcesz zainstalować, a pliki można zapisywać w magazynie lokalnym. Z tego miejsca role mogą odczytywać pliki.

Zadanie uruchamiania może rejestrować informacje i błędy w katalogu określonym przez zmienną środowiskową TEMP . Podczas zadania uruchamiania zmienna środowiskowa TEMP jest rozpoznawana jako C:\Resources\temp\[guid].[ rolename]\Katalog RoleTemp podczas uruchamiania w chmurze.

Zadania uruchamiania mogą być również wykonywane kilka razy między ponownymi uruchomieniami. Na przykład zadanie uruchamiania jest uruchamiane za każdym razem, gdy odtwarzanie roli, a odtwarzanie ról może nie zawsze obejmować ponowne uruchomienie. Zadania uruchamiania powinny być zapisywane w sposób umożliwiający ich uruchamianie kilka razy bez problemów.

Zadania uruchamiania muszą kończyć się wartością errorlevel (lub kodem zakończenia) zera, aby proces uruchamiania został ukończony. Jeśli zadanie uruchamiania kończy się błędem niezerowym, nie można uruchomić roli.

Kolejność uruchamiania roli

Poniżej wymieniono procedurę uruchamiania roli na platformie Azure:

  1. Wystąpienie jest oznaczone jako Uruchamianie i nie odbiera ruchu.

  2. Wszystkie zadania uruchamiania są wykonywane zgodnie z atrybutem taskType .

    • Proste zadania są wykonywane synchronicznie, pojedynczo.

    • Zadania w tle i na pierwszym planie są uruchamiane asynchronicznie, równolegle do zadania uruchamiania.

      Ostrzeżenie

      Usługi IIS mogą nie być w pełni skonfigurowane podczas etapu zadania uruchamiania w procesie uruchamiania, więc dane specyficzne dla roli mogą być niedostępne. Zadania uruchamiania wymagające danych specyficznych dla roli powinny używać elementu Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart.

  3. Proces hosta roli jest uruchamiany, a witryna jest tworzona w usługach Internet Information Services (IIS).

  4. Wywoływana jest metoda Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart .

  5. Wystąpienie jest oznaczone jako Gotowe , a ruch jest kierowany do wystąpienia.

  6. Wywoływana jest metoda Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run .

Przykład zadania uruchamiania

Zadania uruchamiania są definiowane w pliku ServiceDefinition.csdef w elemecie Task . Atrybut commandLine określa nazwę i parametry startowego pliku wsadowego lub polecenia konsoli, atrybut executionContext określa poziom uprawnień zadania uruchamiania, a atrybut taskType określa sposób wykonywania zadania.

W tym przykładzie zmienna środowiskowa MyVersionNumber jest tworzona dla zadania uruchamiania i ustawiana na wartość "1.0.0.0".

ServiceDefinition.csdef:

<Startup>
    <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" >
        <Environment>
            <Variable name="MyVersionNumber" value="1.0.0.0" />
        </Environment>
    </Task>
</Startup>

W poniższym przykładzie plik wsadowy Startup.cmd zapisuje wiersz "Bieżąca wersja to 1.0.0.0" do pliku StartupLog.txt w katalogu określonym przez zmienną środowiskową TEMP. Wiersz EXIT /B 0 zapewnia, że zadanie uruchamiania kończy się z wartością zero .

ECHO The current version is %MyVersionNumber% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT /B 0

Uwaga

W programie Visual Studio właściwość Kopiuj do katalogu wyjściowego dla pliku wsadowego uruchamiania powinna być ustawiona na Wartość Kopiuj zawsze , aby upewnić się, że plik wsadowy startowy został prawidłowo wdrożony na platformie Azure (approot\bin dla ról sieci Web i katalogu aplikacji dla ról procesu roboczego).

Opis atrybutów elementu Task

Poniżej opisano atrybuty elementu Task w pliku ServiceDefinition.csdef :

commandLine — określa wiersz polecenia dla zadania uruchamiania:

  • Polecenie z opcjonalnymi parametrami wiersza polecenia, które rozpoczyna zadanie uruchamiania.
  • Często ten atrybut jest nazwą pliku .cmd lub .bat wsadowego.
  • Zadanie jest powiązane z folderem AppRoot\Bin dla wdrożenia. Zmienne środowiskowe nie są rozszerzane podczas określania ścieżki i pliku zadania. Jeśli wymagane jest rozszerzenie środowiska, możesz utworzyć mały skrypt .cmd, który wywołuje zadanie uruchamiania.
  • Może to być aplikacja konsolowa lub plik wsadowy , który uruchamia skrypt programu PowerShell.

executionContext — określa poziom uprawnień dla zadania uruchamiania. Poziom uprawnień może być ograniczony lub podwyższony:

  • ograniczony
    Zadanie uruchamiania jest uruchamiane z tymi samymi uprawnieniami co rola. Gdy atrybut executionContext elementu runtime jest również ograniczony, używane są uprawnienia użytkownika.
  • podwyższenia
    Zadanie uruchamiania jest uruchamiane z uprawnieniami administratora. Te uprawnienia umożliwiają uruchamianie zadań do instalowania programów, wprowadzania zmian konfiguracji usług IIS, wykonywania zmian rejestru i innych zadań na poziomie administratora bez zwiększania poziomu uprawnień samej roli.

Uwaga

Poziom uprawnień zadania uruchamiania nie musi być taki sam jak sama rola.

taskType — określa sposób wykonywania zadania uruchamiania.

  • prosty
    Zadania są wykonywane synchronicznie, pojedynczo, w kolejności określonej w pliku ServiceDefinition.csdef . Gdy jedno proste zadanie uruchamiania kończy się z wartością errorlevel o wartości zero, zostanie wykonane następne proste zadanie uruchamiania. Jeśli nie ma więcej prostych zadań uruchamiania do wykonania, zostanie uruchomiona sama rola.

    Uwaga

    Jeśli proste zadanie kończy się na poziomie błędu innego niż zero, wystąpienie zostanie zablokowane. Kolejne proste zadania uruchamiania i sama rola nie zostaną uruchomione.

    Aby upewnić się, że plik wsadowy kończy się na poziomie błędu zero, wykonaj polecenie EXIT /B 0 na końcu procesu pliku wsadowego.

  • tło
    Zadania są wykonywane asynchronicznie, równolegle z uruchamianiem roli.

  • Pierwszym planie
    Zadania są wykonywane asynchronicznie, równolegle z uruchamianiem roli. Kluczową różnicą między pierwszym planem a zadaniem w tle jest to, że zadanie pierwszego planu uniemożliwia odtwarzanie lub zamykanie roli do momentu zakończenia zadania. Zadania w tle nie mają tego ograniczenia.

Zmienne środowiskowe

Zmienne środowiskowe to sposób przekazywania informacji do zadania uruchamiania. Można na przykład umieścić ścieżkę do obiektu blob zawierającego program do zainstalowania lub numery portów używane przez rolę lub ustawienia do kontrolowania funkcji zadania uruchamiania.

Istnieją dwa rodzaje zmiennych środowiskowych dla zadań uruchamiania; statyczne zmienne środowiskowe i zmienne środowiskowe oparte na elementach członkowskich klasy RoleEnvironment . Oba są w sekcji Środowisko pliku ServiceDefinition.csdef, a oba używają atrybutu Zmiennej i name.

Statyczne zmienne środowiskowe używają atrybutu wartości elementu Zmiennej. Powyższy przykład tworzy zmienną środowiskową MyVersionNumber , która ma wartość statyczną "1.0.0.0". Innym przykładem może być utworzenie zmiennej środowiskowej StagingOrProduction , którą można ręcznie ustawić na wartości "przejściowe" lub "produkcyjne", aby wykonywać różne akcje uruchamiania na podstawie wartości zmiennej środowiskowej StagingOrProduction .

Zmienne środowiskowe oparte na elementach członkowskich klasy RoleEnvironment nie używają atrybutu value elementu Zmiennej. Zamiast tego element podrzędny RoleInstanceValue z odpowiednią wartością atrybutu XPath służy do tworzenia zmiennej środowiskowej na podstawie określonego elementu członkowskiego klasy RoleEnvironment . Wartości atrybutu XPath w celu uzyskania dostępu do różnych wartości RoleEnvironment można znaleźć tutaj.

Aby na przykład utworzyć zmienną środowiskową o wartości "true", gdy wystąpienie jest uruchomione w emulatorze obliczeniowym i "false" podczas działania w chmurze, użyj następujących elementów Variable i RoleInstanceValue :

<Startup>
    <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
        <Environment>

            <!-- Create the environment variable that informs the startup task whether it is running
                in the Compute Emulator or in the cloud. "%ComputeEmulatorRunning%"=="true" when
                running in the Compute Emulator, "%ComputeEmulatorRunning%"=="false" when running
                in the cloud. -->

            <Variable name="ComputeEmulatorRunning">
                <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
            </Variable>

        </Environment>
    </Task>
</Startup>

Następne kroki

Dowiedz się, jak wykonywać typowe zadania uruchamiania w usłudze w chmurze.

Spakuj usługę w chmurze.