Indítási feladatok konfigurálása és futtatása Azure Cloud Service-hez (klasszikus)

Fontos

Cloud Services (klasszikus) mostantól elavult az új ügyfelek számára, és 2024. augusztus 31-én minden ügyfél számára megszűnik. Az új üzemelő példányoknak az új Azure Resource Manager-alapú Azure Cloud Services (kiterjesztett támogatás) üzembehelyezési modellt kell használniuk.

Az indítási feladatokkal műveleteket hajthat végre a szerepkör indítása előtt. A végrehajtandó műveletek közé tartozik például egy összetevő telepítése, a COM-összetevők regisztrálása, a beállításkulcsok beállítása vagy egy hosszú ideig futó folyamat elindítása.

Megjegyzés

Az indítási feladatok nem alkalmazhatók a Virtual Machines, csak a Felhőszolgáltatás webes és feldolgozói szerepköreire.

Az indítási feladatok működése

Az indítási feladatok olyan műveletek, amelyeket a szerepkörök megkezdése előtt hajtanak végre, és a ServiceDefinition.csdef fájlban vannak definiálva az Indítás elem Feladat elemével. Az indítási feladatok gyakran kötegelt fájlok, de lehetnek konzolalkalmazások vagy PowerShell-szkripteket kezdő kötegelt fájlok is.

A környezeti változók adatokat adnak át egy indítási feladatnak, a helyi tároló pedig az indítási feladat adatainak átadására használható. Egy környezeti változó például megadhatja a telepíteni kívánt program elérési útját, és a fájlokat helyi tárolóba írhatja, amelyeket később a szerepkörei olvashatnak.

Az indítási feladat adatokat és hibákat naplózhat a TEMP környezeti változó által megadott könyvtárba. Az indítási feladat során a TEMP környezeti változó a C:\Resources\temp\[guid][ rolename]\RoleTemp könyvtár a felhőben való futtatáskor.

Az indítási feladatok két újraindítás között többször is végrehajthatók. Például az indítási feladat a szerepkör minden egyes újraindításakor fut, és a szerepkör-újraindítás pedig nem feltétlenül jár újraindítással. Az indítási feladatokat úgy kell megírni, hogy azok probléma nélkül többször is fussanak.

Az indítási feladatoknak nulla hibaszinttel (vagy kilépési kóddal) kell végződniük ahhoz, hogy az indítási folyamat befejeződjön. Ha egy indítási feladat nem nulla hibaszinttel végződik, a szerepkör nem indul el.

Szerepkör indítási sorrendje

Az alábbiakban az Azure-beli szerepkör-indítási eljárást soroljuk fel:

  1. A példány indításként van megjelölve, és nem fogadja a forgalmat.

  2. A rendszer minden indítási feladatot a taskType attribútumának megfelelően hajt végre.

    • Az egyszerű feladatok végrehajtása szinkronban történik, egyenként.

    • A háttér- és előtértevékenységek aszinkron módon, az indítási feladatokkal párhuzamosan indulnak el.

      Figyelmeztetés

      Előfordulhat, hogy az IIS nincs teljesen konfigurálva az indítási folyamat indítási feladatának szakaszában, így előfordulhat, hogy a szerepkörspecifikus adatok nem érhetők el. A szerepkörspecifikus adatokat igénylő indítási feladatoknak a Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart parancsot kell használniuk.

  3. A szerepkörgazdák folyamata elindul, és a webhely az IIS-ben jön létre.

  4. A Rendszer meghívja a Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart metódust .

  5. A példány készként van megjelölve, és a forgalom a példányhoz lesz irányítva.

  6. A rendszer meghívja a Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run metódust .

Példa indítási feladatra

Az indítási feladatok a ServiceDefinition.csdef fájlban, a Feladat elemben vannak definiálva. A commandLine attribútum megadja az indítási kötegfájl vagy konzol parancs nevét és paramétereit, a executionContext attribútum az indítási feladat jogosultsági szintjét, a taskType attribútum pedig a feladat végrehajtásának módját határozza meg.

Ebben a példában egy MyVersionNumber környezeti változó jön létre az indítási feladathoz, és az "1.0.0.0" értékre van állítva.

ServiceDefinition.csdef:

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

A következő példában a Startup.cmd kötegfájl a TEMP környezeti változó által megadott könyvtárban lévő StartupLog.txt fájlba írja az "Aktuális verzió 1.0.0.0" sort. A EXIT /B 0 sor biztosítja, hogy az indítási feladat nulla hibaszinttel végződik.

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

Megjegyzés

A Visual Studióban az indítási kötegfájl Másolás kimeneti könyvtárba tulajdonságát a Copy Always értékre kell állítani, hogy az indítási kötegfájl megfelelően legyen üzembe helyezve az Azure-beli projektben (webszerepkörök esetén approot\bin , feldolgozói szerepkörök esetén pedig approot ).

Feladatattribútumok leírása

Az alábbiak a ServiceDefinition.csdef fájl Task elemének attribútumait ismertetik:

commandLine – Az indítási feladat parancssorát adja meg:

  • A nem kötelező parancssori paraméterekkel rendelkező parancs, amely elindítja az indítási feladatot.
  • Gyakran ez egy .cmd vagy .bat kötegelt fájl fájlneve.
  • A feladat az üzembe helyezésHez tartozó AppRoot\Bin mappához képest van. A környezeti változók nem lesznek kibontva a tevékenység elérési útjának és fájljának meghatározásában. Ha környezetbővítésre van szükség, létrehozhat egy kis .cmd szkriptet, amely meghívja az indítási feladatot.
  • Lehet egy konzolalkalmazás vagy egy PowerShell-szkriptet elindító kötegelt fájl.

executionContext – Az indítási feladat jogosultsági szintjét adja meg. A jogosultsági szint lehet korlátozott vagy emelt szintű:

  • Korlátozott
    Az indítási feladat ugyanazokkal a jogosultságokkal fut, mint a szerepkör. Ha a Futtatókörnyezet elem executionContext attribútuma is korlátozott, akkor a rendszer felhasználói jogosultságokat használ.
  • Emelkedett
    Az indítási feladat rendszergazdai jogosultságokkal fut. Ez lehetővé teszi, hogy az indítási feladatok programokat telepítsenek, IIS-konfigurációs módosításokat végezzenek, beállításjegyzék-módosításokat és egyéb rendszergazdai szintű feladatokat hajtsanak végre anélkül, hogy növelnék a szerepkör jogosultsági szintjét.

Megjegyzés

Az indítási feladat jogosultsági szintjének nem kell megegyeznie a szerepkörével.

taskType – Az indítási feladat végrehajtásának módját határozza meg.

  • Egyszerű
    A feladatok végrehajtása szinkronban, egyenként történik a ServiceDefinition.csdef fájlban megadott sorrendben. Amikor egy egyszerűindítási feladat nullával végződik, a következő egyszerű indítási feladat lesz végrehajtva. Ha nincs több egyszerű indítási feladat, akkor maga a szerepkör lesz elindítva.

    Megjegyzés

    Ha az egyszerű feladat nem nulla hibaszinttel végződik, a példány le lesz tiltva. A következő egyszerű indítási feladatok és maga a szerepkör nem indul el.

    Annak érdekében, hogy a kötegelt fájl nulla hibaszinttel végződjön, futtassa a parancsot EXIT /B 0 a kötegelt fájlfolyamat végén.

  • háttér
    A feladatok végrehajtása aszinkron módon történik, a szerepkör indításával párhuzamosan.

  • Előtér
    A feladatok végrehajtása aszinkron módon történik, a szerepkör indításával párhuzamosan. Az előtérben és a háttérfeladatok között az a fő különbség, hogy az előtérben lévő tevékenységek megakadályozzák a szerepkör újrahasznosítását vagy leállítását a tevékenység befejezéséig. A háttérfeladatok nem rendelkeznek ezzel a korlátozásokkal.

Környezeti változók

A környezeti változók használatával adatokat adhat át egy indítási feladatnak. Elhelyezheti például a telepítendő programot tartalmazó blob elérési útját, vagy a szerepkör által használt portszámokat, illetve az indítási feladat funkcióinak vezérlésére szolgáló beállításokat.

Az indítási feladatokhoz kétféle környezeti változó létezik; statikus környezeti változók és környezeti változók a RoleEnvironment osztály tagjai alapján. Mindkettő a ServiceDefinition.csdef fájl Környezet szakaszában található, és mindkettő a Változó elemet és a névattribútumot használja.

A statikus környezeti változók a Változó elem értékattribútumát használják. A fenti példa létrehozza a MyVersionNumber környezeti változót, amelynek statikus értéke "1.0.0.0". Egy másik példa egy StagingOrProduction környezeti változó létrehozása, amelyet manuálisan "előkészítés" vagy "éles" értékre állíthat be, hogy különböző indítási műveleteket hajtson végre a StagingOrProduction környezeti változó értéke alapján.

A RoleEnvironment osztály tagjain alapuló környezeti változók nem használják a Változó elem értékattribútumát. Ehelyett a RoleInstanceValue gyermekelem a megfelelő XPath attribútumértékkel a RoleEnvironment osztály egy adott tagja alapján hoz létre környezeti változót. A különböző RoleEnvironment értékek eléréséhez használt XPath attribútum értékei itt találhatók.

Ha például olyan környezeti változót szeretne létrehozni, amely "igaz", amikor a példány a számítási emulátorban fut, és "false" (hamis) a felhőben való futtatáskor, használja a következő Változó és RoleInstanceValue elemeket:

<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>

Következő lépések

Megtudhatja, hogyan hajthat végre néhány gyakori indítási feladatot a Felhőszolgáltatással.

Csomagolja be a felhőszolgáltatást.