A Cloud Service (klasszikus) indítási feladatai
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.
Ez a cikk néhány példát mutat be a felhőszolgáltatásban végrehajtandó gyakori indítási feladatokra. 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.
Ebből a cikkből megtudhatja, hogyan működnek az indítási feladatok, és hogyan hozhatja létre az indítási tevékenységet meghatározó bejegyzéseket.
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.
Környezeti változók definiálása szerepkör indítása előtt
Ha egy adott tevékenységhez környezeti változókra van szüksége, használja a Tevékenység elem Környezet elemét.
<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WorkerRole name="WorkerRole1">
...
<Startup>
<Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
<Environment>
<Variable name="MyEnvironmentVariable" value="MyVariableValue" />
</Environment>
</Task>
</Startup>
</WorkerRole>
</ServiceDefinition>
A változók egy érvényes Azure XPath-értékkel is hivatkozhatnak az üzembe helyezéssel kapcsolatban. Az value
attribútum használata helyett definiáljon egy RoleInstanceValue gyermekelemet.
<Variable name="PathToStartupStorage">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='StartupLocalStorage']/@path" />
</Variable>
IIS-indítás konfigurálása AppCmd.exe
A AppCmd.exe parancssori eszköz az IIS-beállítások azure-beli indításkor történő kezelésére használható. AppCmd.exe kényelmes, parancssori hozzáférést biztosít az Azure-beli indítási feladatokhoz használható konfigurációs beállításokhoz. A AppCmd.exehasználatával a webhely beállításai hozzáadhatók, módosíthatók vagy eltávolíthatók alkalmazásokhoz és webhelyekhez.
A AppCmd.exe indítási feladatként való használatakor azonban érdemes odafigyelni néhány dologra:
- Az indítási feladatok az újraindítások között többször is futtathatók. Például amikor egy szerepkör újrafeldolgozik.
- Ha egy AppCmd.exe műveletet többször hajtanak végre, az hibát okozhat. Ha például megpróbál egy szakaszt hozzáadni Web.config kétszer, hibát okozhat.
- Az indítási feladatok sikertelenek, ha nem nulla kilépési kódot vagy hibaszintet adnak vissza. Ha például AppCmd.exe hibát generál.
Érdemes ellenőrizni a hibaszintet a AppCmd.exehívása után, ami könnyen elvégezhető, ha a hívást egy .cmd fájlba csomagoljaAppCmd.exe. Ha ismert hibaszintű választ észlel, figyelmen kívül hagyhatja, vagy visszaküldheti.
A AppCmd.exe által visszaadott hibaszint szerepel a winerror.h fájlban, és az MSDN-en is látható.
Példa a hibaszint kezelésére
Ez a példa egy tömörítési szakaszt és egy JSON-tömörítési bejegyzést ad hozzá aWeb.configfájlhoz, hibakezeléssel és naplózással.
Itt láthatók a ServiceDefinition.csdef fájl megfelelő szakaszai, amelyek magukban foglalják a executionContext attribútum beállítását, hogy elevated
AppCmd.exe megfelelő engedélyeket adjanak a Web.config fájl beállításainak módosításához:
<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WorkerRole name="WorkerRole1">
...
<Startup>
<Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple" />
</Startup>
</WorkerRole>
</ServiceDefinition>
A Startup.cmd kötegelt fájl AppCmd.exe használ egy tömörítési szakasz és egy JSON-tömörítési bejegyzés hozzáadásához a Web.config fájlhoz. A várt 183-as hibaszint nullára van állítva a VERIFY.EXE parancssori program használatával. A rendszer váratlan hibaszinteket naplóz a StartupErrorLog.txt.
REM *** Add a compression section to the Web.config file. ***
%windir%\system32\inetsrv\appcmd set config /section:urlCompression /doDynamicCompression:True /commit:apphost >> "%TEMP%\StartupLog.txt" 2>&1
REM ERRORLEVEL 183 occurs when trying to add a section that already exists. This error is expected if this
REM batch file were executed twice. This can occur and must be accounted for in an Azure startup
REM task. To handle this situation, set the ERRORLEVEL to zero by using the Verify command. The Verify
REM command will safely set the ERRORLEVEL to zero.
IF %ERRORLEVEL% EQU 183 VERIFY > NUL
REM If the ERRORLEVEL is not zero at this point, some other error occurred.
IF %ERRORLEVEL% NEQ 0 (
ECHO Error adding a compression section to the Web.config file. >> "%TEMP%\StartupLog.txt" 2>&1
GOTO ErrorExit
)
REM *** Add compression for json. ***
%windir%\system32\inetsrv\appcmd set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost >> "%TEMP%\StartupLog.txt" 2>&1
IF %ERRORLEVEL% EQU 183 VERIFY > NUL
IF %ERRORLEVEL% NEQ 0 (
ECHO Error adding the JSON compression type to the Web.config file. >> "%TEMP%\StartupLog.txt" 2>&1
GOTO ErrorExit
)
REM *** Exit batch file. ***
EXIT /b 0
REM *** Log error and exit ***
:ErrorExit
REM Report the date, time, and ERRORLEVEL of the error.
DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
TIME /T >> "%TEMP%\StartupLog.txt" 2>&1
ECHO An error occurred during startup. ERRORLEVEL = %ERRORLEVEL% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT %ERRORLEVEL%
Tűzfalszabályok hozzáadása
Az Azure-ban gyakorlatilag két tűzfal létezik. Az első tűzfal szabályozza a virtuális gép és a külvilág közötti kapcsolatokat. Ezt a tűzfalat a ServiceDefinition.csdef fájl EndPoints eleme vezérli.
A második tűzfal szabályozza a virtuális gép és a virtuális gépen belüli folyamatok közötti kapcsolatokat. Ezt a tűzfalat a parancssori netsh advfirewall firewall
eszköz vezérelheti.
Az Azure tűzfalszabályokat hoz létre a szerepkörökben elindított folyamatokhoz. Amikor például elindít egy szolgáltatást vagy programot, az Azure automatikusan létrehozza a szükséges tűzfalszabályokat, hogy a szolgáltatás kommunikálhasson az internettel. Ha azonban olyan szolgáltatást hoz létre, amelyet a szerepkörén kívüli folyamat (például COM+ szolgáltatás vagy Windows ütemezett feladat) indít el, manuálisan kell létrehoznia egy tűzfalszabályt a szolgáltatáshoz való hozzáférés engedélyezéséhez. Ezek a tűzfalszabályok indítási feladattal hozhatók létre.
A tűzfalszabályt létrehozó indítási feladatnak emelt szintűvégrehajtási kontextussal kell rendelkeznie. Adja hozzá a következő indítási feladatot a ServiceDefinition.csdef fájlhoz.
<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WorkerRole name="WorkerRole1">
...
<Startup>
<Task commandLine="AddFirewallRules.cmd" executionContext="elevated" taskType="simple" />
</Startup>
</WorkerRole>
</ServiceDefinition>
A tűzfalszabály hozzáadásához a megfelelő netsh advfirewall firewall
parancsokat kell használnia az indítási kötegfájlban. Ebben a példában az indítási feladathoz biztonságra és titkosításra van szükség a 80-s TCP-porthoz.
REM Add a firewall rule in a startup task.
REM Add an inbound rule requiring security and encryption for TCP port 80 traffic.
netsh advfirewall firewall add rule name="Require Encryption for Inbound TCP/80" protocol=TCP dir=in localport=80 security=authdynenc action=allow >> "%TEMP%\StartupLog.txt" 2>&1
REM If an error occurred, return the errorlevel.
EXIT /B %errorlevel%
Adott IP-cím letiltása
Az IIS -web.config fájl módosításával korlátozhatja az Azure-beli webes szerepkörök hozzáférését a megadott IP-címek halmazára. Olyan parancsfájlt is használnia kell, amely feloldja a ApplicationHost.config fájl ipSecurity szakaszát.
A ApplicationHost.config fájl ipSecurity szakaszának feloldásához hozzon létre egy parancsfájlt, amely a szerepkör elején fut. Hozzon létre egy mappát a webes szerepkör indítás nevű gyökérszintjén, és ebben a mappában hozzon létre egy startup.cmd nevű kötegfájlt. Adja hozzá ezt a fájlt a Visual Studio-projekthez, és állítsa a tulajdonságokat a Copy Always értékre , hogy biztosan szerepeljen a csomagban.
Adja hozzá a következő indítási feladatot a ServiceDefinition.csdef fájlhoz.
<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1">
...
<Startup>
<Task commandLine="startup.cmd" executionContext="elevated" />
</Startup>
</WebRole>
</ServiceDefinition>
Adja hozzá ezt a parancsot a startup.cmd fájlhoz:
@echo off
@echo Installing "IPv4 Address and Domain Restrictions" feature
powershell -ExecutionPolicy Unrestricted -command "Install-WindowsFeature Web-IP-Security"
@echo Unlocking configuration for "IPv4 Address and Domain Restrictions" feature
%windir%\system32\inetsrv\AppCmd.exe unlock config -section:system.webServer/security/ipSecurity
Ez a feladat a startup.cmd kötegfájl futtatását eredményezi a webes szerepkör inicializálásakor, biztosítva, hogy a szükséges ipSecurity szakasz feloldva legyen.
Végül módosítsa a system.webServer szakaszt a webszerepkör web.config fájljához, hogy hozzáadja a hozzáférést biztosító IP-címek listáját az alábbi példában látható módon:
Ez a mintakonfigurálás lehetővé teszi , hogy az összes IP-cím hozzáférjen a kiszolgálóhoz, kivéve a két definiált
<system.webServer>
<security>
<!--Unlisted IP addresses are granted access-->
<ipSecurity>
<!--The following IP addresses are denied access-->
<add allowed="false" ipAddress="192.168.100.1" subnetMask="255.255.0.0" />
<add allowed="false" ipAddress="192.168.100.2" subnetMask="255.255.0.0" />
</ipSecurity>
</security>
</system.webServer>
Ez a mintakonfigurálás a két definiált kivételével minden IP-címet letilt a kiszolgáló eléréséhez.
<system.webServer>
<security>
<!--Unlisted IP addresses are denied access-->
<ipSecurity allowUnlisted="false">
<!--The following IP addresses are granted access-->
<add allowed="true" ipAddress="192.168.100.1" subnetMask="255.255.0.0" />
<add allowed="true" ipAddress="192.168.100.2" subnetMask="255.255.0.0" />
</ipSecurity>
</security>
</system.webServer>
PowerShell-indítási feladat létrehozása
Windows PowerShell szkriptek nem hívhatók meg közvetlenül a ServiceDefinition.csdef fájlból, de egy indítási kötegfájlból hívhatók meg.
A PowerShell (alapértelmezés szerint) nem futtat aláíratlan szkripteket. Ha nem írja alá a szkriptet, konfigurálnia kell a PowerShellt az aláíratlan szkriptek futtatásához. Az aláíratlan szkriptek futtatásához a ExecutionPolicy beállítást Korlátlan értékre kell állítani. A használt ExecutionPolicy beállítás a Windows PowerShell verzióján alapul.
REM Run an unsigned PowerShell script and log the output
PowerShell -ExecutionPolicy Unrestricted .\startup.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
REM If an error occurred, return the errorlevel.
EXIT /B %errorlevel%
Ha PowerShell 2.0-s vagy 1.0-s verziót futtató vendég operációs rendszert használ, kényszerítheti a 2-es verzió futtatását, és ha nem érhető el, használja az 1-es verziót.
REM Attempt to set the execution policy by using PowerShell version 2.0 syntax.
PowerShell -Version 2.0 -ExecutionPolicy Unrestricted .\startup.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
REM If PowerShell version 2.0 isn't available. Set the execution policy by using the PowerShell
IF %ERRORLEVEL% EQU -393216 (
PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
PowerShell .\startup.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
)
REM If an error occurred, return the errorlevel.
EXIT /B %errorlevel%
Fájlok létrehozása helyi tárolóban indítási feladatból
Helyi tárolási erőforrással tárolhatja az indítási feladat által létrehozott fájlokat, amelyeket az alkalmazás később ér el.
A helyi tárolási erőforrás létrehozásához adjon hozzá egy LocalResources szakaszt a ServiceDefinition.csdef fájlhoz, majd adja hozzá a LocalStorage gyermekelemet. Adjon egyedi nevet és méretet a helyi tárolóerőforrásnak az indítási feladathoz.
Ha helyi tárolási erőforrást szeretne használni az indítási feladatban, létre kell hoznia egy környezeti változót a helyi tárolási erőforrás helyére való hivatkozáshoz. Ezután az indítási feladat és az alkalmazás képes fájlokat olvasni és írni a helyi tárolási erőforrásba.
A ServiceDefinition.csdef fájl vonatkozó szakaszai itt láthatók:
<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WorkerRole name="WorkerRole1">
...
<LocalResources>
<LocalStorage name="StartupLocalStorage" sizeInMB="5"/>
</LocalResources>
<Startup>
<Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
<Environment>
<Variable name="PathToStartupStorage">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='StartupLocalStorage']/@path" />
</Variable>
</Environment>
</Task>
</Startup>
</WorkerRole>
</ServiceDefinition>
Ez a Startup.cmd kötegfájl például a PathToStartupStorage környezeti változóval hozza létre a fájlt a helyi tárolóhelyen MyTest.txt .
REM Create a simple text file.
ECHO This text will go into the MyTest.txt file which will be in the > "%PathToStartupStorage%\MyTest.txt"
ECHO path pointed to by the PathToStartupStorage environment variable. >> "%PathToStartupStorage%\MyTest.txt"
ECHO The contents of the PathToStartupStorage environment variable is >> "%PathToStartupStorage%\MyTest.txt"
ECHO "%PathToStartupStorage%". >> "%PathToStartupStorage%\MyTest.txt"
REM Exit the batch file with ERRORLEVEL 0.
EXIT /b 0
A helyi tárolómappát a GetLocalResource metódussal érheti el az Azure SDK-ból.
string localStoragePath = Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetLocalResource("StartupLocalStorage").RootPath;
string fileContent = System.IO.File.ReadAllText(System.IO.Path.Combine(localStoragePath, "MyTestFile.txt"));
Futtatás az emulátorban vagy a felhőben
Az indítási feladat különböző lépéseket hajthat végre, amikor a felhőben működik, mint a számítási emulátorban. Előfordulhat például, hogy az SQL-adatok friss másolatát csak akkor szeretné használni, ha az emulátorban fut. Vagy érdemes lehet elvégezni néhány teljesítményoptimalizálást a felhőhöz, amelyet nem kell elvégeznie az emulátorban való futtatáskor.
Ez a képesség a számítási emulátoron és a felhőn végzett különböző műveletek végrehajtásához létrehozhat egy környezeti változót a ServiceDefinition.csdef fájlban. Ezután teszteli a környezeti változót az indítási feladatban szereplő érték alapján.
A környezeti változó létrehozásához adja hozzá a Változó/RoleInstanceValue elemet, és hozzon létre egy XPath-értéket./RoleEnvironment/Deployment/@emulated
A %ComputeEmulatorRunning% környezeti változó true
értéke a számítási emulátoron való futtatáskor és false
a felhőben való futtatáskor van.
<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WorkerRole name="WorkerRole1">
...
<Startup>
<Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
<Environment>
<Variable name="ComputeEmulatorRunning">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
</Environment>
</Task>
</Startup>
</WorkerRole>
</ServiceDefinition>
A feladat most már ellenőrizheti a %ComputeEmulatorRunning% környezeti változót, és különböző műveleteket hajthat végre attól függően, hogy a szerepkör a felhőben vagy az emulátorban fut-e. Íme egy .cmd rendszerhéjszkript, amely ellenőrzi a környezeti változót.
REM Check if this task is running on the compute emulator.
IF "%ComputeEmulatorRunning%" == "true" (
REM This task is running on the compute emulator. Perform tasks that must be run only in the compute emulator.
) ELSE (
REM This task is running on the cloud. Perform tasks that must be run only in the cloud.
)
Annak észlelése, hogy a tevékenység már lefutott
Előfordulhat, hogy a szerepkör újraindítás nélkül újraindul, és az indítási feladatok újrafutnak. Nincs olyan jelző, amely azt jelezheti, hogy egy feladat már fut a üzemeltetési virtuális gépen. Előfordulhat, hogy vannak olyan feladatok, amelyekben nem számít, hogy többször is futnak. Előfordulhat azonban, hogy egy feladat többszöri futtatását meg kell akadályoznia.
A legegyszerűbben úgy észlelheti, hogy egy tevékenység már lefutott, ha létrehoz egy fájlt a %TEMP% mappában, amikor a feladat sikeres, és a tevékenység elején keresi. Íme egy példa cmd shell-szkriptre, amely ezt teszi az Ön számára.
REM If Task1_Success.txt exists, then Application 1 is already installed.
IF EXIST "%PathToApp1Install%\Task1_Success.txt" (
ECHO Application 1 is already installed. Exiting. >> "%TEMP%\StartupLog.txt" 2>&1
GOTO Finish
)
REM Run your real exe task
ECHO Running XYZ >> "%TEMP%\StartupLog.txt" 2>&1
"%PathToApp1Install%\setup.exe" >> "%TEMP%\StartupLog.txt" 2>&1
IF %ERRORLEVEL% EQU 0 (
REM The application installed without error. Create a file to indicate that the task
REM does not need to be run again.
ECHO This line will create a file to indicate that Application 1 installed correctly. > "%PathToApp1Install%\Task1_Success.txt"
) ELSE (
REM An error occurred. Log the error and exit with the error code.
DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
TIME /T >> "%TEMP%\StartupLog.txt" 2>&1
ECHO An error occurred running task 1. Errorlevel = %ERRORLEVEL%. >> "%TEMP%\StartupLog.txt" 2>&1
EXIT %ERRORLEVEL%
)
:Finish
REM Exit normally.
EXIT /B 0
Ajánlott eljárások a feladatokhoz
Íme néhány ajánlott eljárás, amelyeket érdemes követnie a webes vagy feldolgozói szerepkör feladatának konfigurálásakor.
Mindig naplózza az indítási tevékenységeket
A Visual Studio nem biztosít hibakeresőt a kötegelt fájlokon való lépéshez, ezért érdemes minél több adatot lekérni a kötegelt fájlok működéséről. A kötegelt fájlok kimenetének naplózása ( stdout és stderr) fontos információkat nyújthat a kötegelt fájlok hibakeresése és javítása során. Ha az stdout és az stderr fájlt is naplózni szeretné a könyvtár %TEMP% környezeti változója által mutatott StartupLog.txt fájlba, adja hozzá a szöveget >> "%TEMP%\\StartupLog.txt" 2>&1
a naplózni kívánt sorok végéhez. Például a %PathToApp1Install% könyvtárban setup.exe végrehajtásához: "%PathToApp1Install%\setup.exe" >> "%TEMP%\StartupLog.txt" 2>&1
Az XML egyszerűsítése érdekében létrehozhat egy burkoló parancsfájlt , amely meghívja az összes indítási feladatot a naplózással együtt, és biztosítja, hogy minden gyermekfeladat ugyanazokat a környezeti változókat használja.
Előfordulhat, hogy bosszantónak találja, ha az egyes indítási feladatok végén használja >> "%TEMP%\StartupLog.txt" 2>&1
. A feladatnaplózást úgy kényszerítheti ki, hogy létrehoz egy burkolót, amely kezeli a naplózást. Ez a burkoló meghívja a futtatni kívánt valódi kötegfájlt. A célkötegfájl kimenete a Startuplog.txt fájlba lesz átirányítva.
Az alábbi példa bemutatja, hogyan irányíthatja át az összes kimenetet egy indítási kötegfájlból. Ebben a példában a ServerDefinition.csdef fájl létrehoz egy indítási feladatot, amely meghívja a logwrap.cmd fájlt. A logwrap.cmd meghívja a Startup2.cmd parancsot, és átirányítja az összes kimenetet a következőre: %TEMP%\StartupLog.txt.
ServiceDefinition.cmd:
<Startup>
<Task commandLine="logwrap.cmd startup2.cmd" executionContext="limited" taskType="simple" />
</Startup>
logwrap.cmd:
@ECHO OFF
REM logwrap.cmd calls passed in batch file, redirecting all output to the StartupLog.txt log file.
ECHO [%date% %time%] == START logwrap.cmd ============================================== >> "%TEMP%\StartupLog.txt" 2>&1
ECHO [%date% %time%] Running %1 >> "%TEMP%\StartupLog.txt" 2>&1
REM Call the child command batch file, redirecting all output to the StartupLog.txt log file.
START /B /WAIT %1 >> "%TEMP%\StartupLog.txt" 2>&1
REM Log the completion of child command.
ECHO [%date% %time%] Done >> "%TEMP%\StartupLog.txt" 2>&1
IF %ERRORLEVEL% EQU 0 (
REM No errors occurred. Exit logwrap.cmd normally.
ECHO [%date% %time%] == END logwrap.cmd ================================================ >> "%TEMP%\StartupLog.txt" 2>&1
ECHO. >> "%TEMP%\StartupLog.txt" 2>&1
EXIT /B 0
) ELSE (
REM Log the error.
ECHO [%date% %time%] An error occurred. The ERRORLEVEL = %ERRORLEVEL%. >> "%TEMP%\StartupLog.txt" 2>&1
ECHO [%date% %time%] == END logwrap.cmd ================================================ >> "%TEMP%\StartupLog.txt" 2>&1
ECHO. >> "%TEMP%\StartupLog.txt" 2>&1
EXIT /B %ERRORLEVEL%
)
Startup2.cmd:
@ECHO OFF
REM This is the batch file where the startup steps should be performed. Because of the
REM way Startup2.cmd was called, all commands and their outputs will be stored in the
REM StartupLog.txt file in the directory pointed to by the TEMP environment variable.
REM If an error occurs, the following command will pass the ERRORLEVEL back to the
REM calling batch file.
ECHO [%date% %time%] Some log information about this task
ECHO [%date% %time%] Some more log information about this task
EXIT %ERRORLEVEL%
Mintakimenet a StartupLog.txt fájlban:
[Mon 10/17/2016 20:24:46.75] == START logwrap.cmd ==============================================
[Mon 10/17/2016 20:24:46.75] Running command1.cmd
[Mon 10/17/2016 20:24:46.77] Some log information about this task
[Mon 10/17/2016 20:24:46.77] Some more log information about this task
[Mon 10/17/2016 20:24:46.77] Done
[Mon 10/17/2016 20:24:46.77] == END logwrap.cmd ================================================
Tipp
A StartupLog.txt fájl a C:\Resources\temp\{role identifier}\RoleTemp mappában található.
A executionContext megfelelő beállítása indítási feladatokhoz
Állítsa be a megfelelő jogosultságokat az indítási feladathoz. Néha az indítási feladatoknak emelt szintű jogosultságokkal kell futniuk, annak ellenére, hogy a szerepkör normál jogosultságokkal fut.
A executionContext attribútum beállítja az indítási feladat jogosultsági szintjét. A használata executionContext="limited"
azt jelenti, hogy az indítási feladat jogosultsági szintje megegyezik a szerepkörével. A használata executionContext="elevated"
azt jelenti, hogy az indítási feladat rendszergazdai jogosultságokkal rendelkezik, ami lehetővé teszi, hogy az indítási feladat rendszergazdai feladatokat végezzen anélkül, hogy rendszergazdai jogosultságokat ad az Ön szerepkörének.
Emelt szintű jogosultságokat igénylő indítási feladat például egy indítási feladat, amely AppCmd.exe használ az IIS konfigurálásához. AppCmd.exe megköveteli a parancsot executionContext="elevated"
.
A megfelelő taskType használata
A taskType attribútum határozza meg az indítási feladat végrehajtását. Három érték létezik: egyszerű, háttér és előtér. A háttér- és előtérfeladatok aszinkron módon indulnak el, majd az egyszerű feladatok végrehajtása szinkronban történik.
Egyszerű indítási feladatok esetén beállíthatja, hogy a feladatok a ServiceDefinition.csdef fájlban megadott sorrendben fussanak. Ha egy egyszerű feladat nem nulla kilépési kóddal végződik, az indítási eljárás leáll, és a szerepkör nem indul el.
A háttérbeli indítási feladatok és az előtérbeli indítási feladatok között az a különbség, hogy az előtérbeli feladatok addig futnak, amíg az előtérbeli tevékenység véget nem ér. Ez azt is jelenti, hogy ha az előtérbeli tevékenység lefagy vagy összeomlik, a szerepkör csak akkor lesz újraindul, ha az előtérbeli tevékenység bezárul. Ezért a háttérfeladatok aszinkron indítási feladatokhoz ajánlottak, kivéve, ha az előtérben lévő feladatnak erre a funkciójára van szüksége.
Kötegelt fájlok befejezése az EXIT /B 0 használatával
A szerepkör csak akkor indul el, ha az egyes egyszerű indítási feladatok hibaszintje nulla. Nem minden program állítja be helyesen a hibaszintet (kilépési kódot), ezért a kötegfájlnak egy-egy EXIT /B 0
értékkel kell végződnie, ha minden megfelelően futott.
A nem induló szerepkörök gyakori oka, hogy egy indítási kötegfájl végén hiányzik EXIT /B 0
.
Megjegyzés
Észrevettem, hogy a beágyazott kötegelt fájlok néha nem válaszolnak a /B
paraméter használatakor. Érdemes lehet meggyőződni arról, hogy ez a probléma nem fordul elő, ha egy másik kötegfájl meghívja az aktuális kötegfájlt, például ha a naplóburkolót használja. Ebben az esetben kihagyhatja a /B
paramétert.
Indítási feladatok többszöri futtatásának várható
Nem minden szerepkör-lomtár tartalmaz újraindítást, de minden szerepkör-újrahasznosítás magában foglalja az összes indítási feladat futtatását. Ez azt jelenti, hogy az indítási feladatoknak probléma nélkül többször is futniuk kell az újraindítások között. Ezt az előző szakaszban tárgyaljuk.
A szerepkörben elérendő fájlok tárolása helyi tároló használatával
Ha az indítási feladat során olyan fájlt szeretne másolni vagy létrehozni, amely ezután elérhető a szerepkör számára, akkor a fájlt a helyi tárolóba kell helyezni. Lásd az előző szakaszt.
Következő lépések
Tekintse át a felhőszolgáltatási modellt és -csomagot
További információ a feladatok működéséről.
Hozza létre és helyezze üzembe a felhőszolgáltatás-csomagot.