Tugas Startup (klasik) Layanan Awan Umum

Penting

Cloud Services (klasik) sekarang tidak lagi digunakan untuk pelanggan baru dan akan dihentikan untuk semua pelanggan pada 31 Agustus 2024. Penyebaran baru sebaiknya menggunakan Azure Resource Manager yang baru berdasarkan model penyebaran Azure Cloud Services (dukungan tambahan) .

Artikel ini menyediakan beberapa contoh tugas startup umum yang mungkin ingin Anda lakukan di layanan awan Anda. Anda bisa menggunakan tugas startup untuk melakukan operasi sebelum peran dimulai. Operasi yang mungkin ingin Anda lakukan termasuk memasang komponen, mendaftarkan komponen COM, mengatur kunci registri, atau memulai proses yang berjalan lama.

Lihat artikel ini untuk memahami cara kerja tugas startup, dan khususnya cara membuat entri yang menentukan tugas startup.

Catatan

Tugas startup tidak berlaku untuk Virtual Machines, hanya untuk Web Layanan Awan dan peran Pekerja.

Menentukan variabel lingkungan sebelum peran dimulai

Jika Anda memerlukan variabel lingkungan yang ditentukan untuk tugas tertentu, gunakan elemen Lingkungan di dalam elemen Tugas.

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

Variabel juga dapat menggunakan nilai Azure XPath yang valid untuk mereferensikan sesuatu tentang penyebaran. Alih-alih menggunakan atribut value, tentukan elemen anak RoleInstanceValue.

<Variable name="PathToStartupStorage">
    <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='StartupLocalStorage']/@path" />
</Variable>

Mengonfigurasi startup IIS dengan AppCmd.exe

Alat baris perintah AppCmd.exe dapat digunakan untuk mengelola pengaturan IIS saat startup di Azure. AppCmd.exe menyediakan akses baris perintah yang nyaman ke pengaturan konfigurasi untuk digunakan dalam tugas permulaan di Azure. Dengan AppCmd.exe, pengaturan Situs Web dapat ditambahkan, dimodifikasi, atau dihapus untuk aplikasi dan situs.

Namun, ada beberapa hal yang perlu diperhatikan dalam penggunaan AppCmd.exe sebagai tugas startup:

  • Tugas permulaan dapat dijalankan lebih dari sekali di antara mulai ulang. Misalnya, saat peran didaur ulang.
  • Jika AppCmd.exe dilakukan lebih dari sekali, tindakan tersebut dapat menghasilkan kesalahan. Misalnya, mencoba menambahkan bagian ke Web.config dua kali dapat menghasilkan kesalahan.
  • Tugas startup gagal jika mengembalikan kode keluar non-nol atau errorlevel. Misalnya, ketikaAppCmd.exe menghasilkan kesalahan.

Ini adalah praktik yang baik untuk memeriksa errorlevel setelah memanggil AppCmd.exe, yang mudah dilakukan jika Anda membungkus panggilan untuk AppCmd.exe dengan file .cmd. Jika Anda mendeteksi respons errorlevel yang diketahui, Anda dapat mengabaikannya, atau meneruskannya kembali.

Errorlvel yang dikembalikan oleh AppCmd.exe yang tercantum dalam file winerror.h, dan juga dapat dilihat di MSDN.

Contoh pengelolaan tingkat kesalahan

Contoh ini menambahkan bagian kompresi dan entri kompresi untuk JSON ke file Web.config , dengan penanganan kesalahan dan pencatatan.

Bagian yang relevan dari file ServiceDefinition.csdef ditampilkan di sini, yang mencakup pengaturan atribut executionContext untuk memberi elevatedAppCmd.exe izin yang memadai untuk mengubah pengaturan dalam file Web.config:

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

File batch Startup.cmd menggunakan AppCmd.exe untuk menambahkan bagian kompresi dan entri kompresi untuk JSON ke file Web.config. Errorlevel yang diharapkan dari 183 diatur ke nol VERIFY.EXE program baris perintah. Errorlevel tak terduga dicatat ke 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%

Tambah aturan firewall

Di Azure, secara efektif ada dua firewall. Firewall pertama mengontrol koneksi antara komputer virtual dan dunia luar. Firewall ini dikendalikan oleh elemen EndPoints dalam file ServiceDefinition.csdef.

Firewall kedua mengontrol koneksi antara komputer virtual dan proses dalam komputer virtual itu. Firewall ini dapat dikontrol oleh netsh advfirewall firewall alat baris perintah.

Azure membuat aturan firewall untuk proses yang dimulai dalam peran Anda. Misalnya, saat Anda memulai layanan atau program, Azure secara otomatis membuat aturan firewall yang diperlukan untuk memungkinkan layanan tersebut berkomunikasi dengan Internet. Namun, jika Anda membuat layanan yang dimulai oleh proses di luar peran Anda (seperti layanan COM+ atau Tugas Terjadwal Windows), Anda perlu membuat aturan firewall secara manual untuk mengizinkan akses ke layanan tersebut. Aturan firewall ini bisa dibuat dengan menggunakan tugas startup.

Tugas startup yang membuat aturan firewall harus memiliki executionContext yang ditinggikan. Tambahkan tugas mulai berikut ke file ServiceDefinition.csdef.

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

Untuk menambahkan aturan firewall, Anda harus menggunakan perintah netsh advfirewall firewall yang sesuai dalam file batch startup Anda. Dalam contoh ini, tugas startup memerlukan keamanan dan enkripsi untuk port TCP 80.

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%

Memblokir alamat IP tertentu

Anda dapat membatasi akses peran web Azure ke sekumpulan alamat IP tertentu dengan memodifikasi file web.config IIS Anda. Anda juga perlu menggunakan file perintah yang membuka kunci bagian ipSecurity dari fileApplicationHost.config.

Untuk membuka kunci bagian ipSecurity dari file ApplicationHost.config, buat file perintah yang berjalan pada awal peran. Buat folder di tingkat root peran web Anda yang disebut startup dan, dalam folder ini, buat file batch yang disebut startup.cmd. Tambahkan file ini ke proyek Visual Studio Anda dan atur properti ke Salin Selalu untuk memastikan bahwa file tersebut disertakan dalam paket Anda.

Tambahkan tugas mulai berikut ke file ServiceDefinition.csdef.

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

Tambahkan perintah ini ke berkas startup.cmd:

@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

Tugas ini menyebabkan file batch startup.cmd dijalankan setiap kali peran web diinisialisasi, memastikan bahwa bagian ipSecurity yang diperlukan tidak terkunci.

Terakhir, ubah bagian system.webServer file web.config peran web Anda untuk menambahkan daftar alamat IP yang diberikan akses, seperti yang ditunjukkan dalam contoh berikut:

Konfigurasi sampel ini memungkinkan semua IP untuk mengakses server kecuali keduanya didefinisikan

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

Konfigurasi sampel ini menolak semua IP untuk mengakses server kecuali keduanya didefinisikan.

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

Membuat tugas startup PowerShell

Skrip Windows PowerShell tidak dapat dipanggil langsung dari file ServiceDefinition.csdef, tetapi dapat dipanggil dari dalam file batch startup.

PowerShell (secara default) tidak menjalankan skrip yang tidak ditandatangani. Kecuali Anda menandatangani skrip, Anda perlu mengonfigurasi PowerShell untuk menjalankan skrip yang tidak ditandatangani. Untuk menjalankan skrip yang tidak ditandatangani, ExecutionPolicy harus diatur ke Tidak Dibatasi. Pengaturan ExecutionPolicy yang Anda gunakan didasarkan pada versi Windows PowerShell.

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%

Jika Anda menggunakan OS Tamu yang menjalankan PowerShell 2.0 atau 1.0, Anda dapat memaksa versi 2 untuk menjalankan, dan jika tidak tersedia, gunakan versi 1.

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%

Membuat file di penyimpanan lokal dari tugas startup

Anda dapat menggunakan sumber daya penyimpanan lokal untuk menyimpan file yang dibuat oleh tugas startup Anda yang diakses nanti oleh aplikasi Anda.

Untuk membuat sumber daya penyimpanan lokal, tambahkan bagian LocalResources ke file ServiceDefinition.csdef lalu tambahkan elemen anak LocalStorage. Beri sumber daya penyimpanan lokal nama unik dan ukuran yang sesuai untuk tugas startup Anda.

Untuk menggunakan sumber daya penyimpanan lokal dalam tugas startup, Anda perlu membuat variabel lingkungan untuk mereferensikan lokasi sumber daya penyimpanan lokal. Kemudian tugas startup dan aplikasi mampu membaca dan menulis file ke sumber daya penyimpanan lokal.

Bagian yang relevan dari file ServiceDefinition.csdef diperlihatkan di sini:

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

Sebagai contoh, file batch Startup.cmd ini menggunakan variabel lingkungan PathToStartupStorage untuk membuat file MyTest.txt di lokasi penyimpanan lokal.

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

Anda dapat mengakses folder penyimpanan lokal dari Azure SDK dengan menggunakan metode GetLocalResource.

string localStoragePath = Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetLocalResource("StartupLocalStorage").RootPath;

string fileContent = System.IO.File.ReadAllText(System.IO.Path.Combine(localStoragePath, "MyTestFile.txt"));

Berjalan di emulator atau awan

Anda dapat meminta tugas startup Anda melakukan langkah-langkah yang berbeda ketika beroperasi di awan dibandingkan dengan saat berada di emulator komputasi. Misalnya, Anda mungkin ingin menggunakan salinan baru data SQL Anda hanya saat berjalan di emulator. Atau Anda mungkin ingin melakukan beberapa pengoptimalan kinerja untuk awan yang tidak perlu Anda lakukan saat berjalan di emulator.

Kemampuan untuk melakukan tindakan yang berbeda pada emulator komputasi dan awan dapat dicapai dengan membuat variabel lingkungan dalam file ServiceDefinition.csdef. Anda kemudian menguji variabel lingkungan tersebut untuk nilai dalam tugas startup Anda.

Untuk membuat variabel lingkungan, tambahkan elemen/RoleInstanceValue dan buat nilai XPath/RoleEnvironment/Deployment/@emulated. Nilai variabel lingkungan %ComputeEmulatorRunning%true adalah ketika berjalan pada emulator komputasi, false dan ketika berjalan di awan.

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

Tugas sekarang dapat memeriksa variabel lingkungan %ComputeEmulatorRunning% untuk melakukan tindakan yang berbeda berdasarkan apakah peran berjalan di awan atau emulator. Berikut adalah skrip shell .cmd yang memeriksa variabel lingkungan tersebut.

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

Mendeteksi bahwa tugas Anda telah berjalan

Peran dapat didaur ulang tanpa mulai ulang yang menyebabkan tugas startup Anda berjalan lagi. Tidak ada bendera untuk menunjukkan bahwa tugas telah berjalan pada VM hosting. Anda mungkin memiliki beberapa tugas di mana tidak masalah bahwa tugas tersebut berjalan beberapa kali. Namun, Anda mungkin mengalami situasi di mana Anda perlu mencegah tugas berjalan lebih dari sekali.

Cara paling sederhana untuk mendeteksi bahwa tugas telah dijalankan adalah dengan membuat file di folder %TEMP% ketika tugas berhasil dan mencarinya di awal tugas. Berikut adalah contoh skrip shell cmd yang melakukan itu untuk Anda.

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

Praktik terbaik tugas

Berikut adalah beberapa praktik terbaik yang harus Anda ikuti saat mengonfigurasi tugas untuk peran web atau pekerja Anda.

Selalu catat aktivitas permulaan

Visual Studio tidak menyediakan debugger untuk menelusuri file batch, jadi ada baiknya untuk mendapatkan data sebanyak mungkin tentang pengoperasian file batch. Mencatat output file batch, baik stdout maupunstderr, dapat memberi Anda informasi penting saat mencoba men-debug dan memperbaiki file batch. Untuk mencatat stdout dan stderr ke berkas StartupLog.txt di direktori yang ditunjukkan oleh variabel lingkungan %TEMP% , tambahkan teks >> "%TEMP%\\StartupLog.txt" 2>&1 ke akhir baris tertentu yang ingin Anda catat. Misalnya, untuk menjalankan setup.exe di direktori %PathToApp1Install%:"%PathToApp1Install%\setup.exe" >> "%TEMP%\StartupLog.txt" 2>&1

Untuk menyederhanakan xml, Anda dapat membuat file cmd pembungkus yang memanggil semua tugas startup Anda bersama dengan pembuatan log dan memastikan setiap tugas turunan berbagi variabel lingkungan yang sama.

Anda mungkin merasa menjengkelkan untuk digunakan >> "%TEMP%\StartupLog.txt" 2>&1 pada akhir setiap tugas startup. Anda dapat memberlakukan pencatatan tugas dengan membuat pembungkus yang menangani pencatatan untuk Anda. Pembungkus ini memanggil file batch nyata yang ingin Anda jalankan. Setiap keluaran dari file batch target akan dialihkan ke file Startuplog.txt ini.

Contoh berikut menunjukkan cara mengalihkan semua output dari file batch startup. Dalam contoh ini, file ServerDefinition.csdef membuat tugas startup yang memanggil logwrap.cmd. logwrap.cmd memanggil Startup2.cmd,mengalihkan semua output ke %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%

Contoh output dalam file StartupLog.txt:

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

Tip

File StartupLog.txt terletak di folder C:\Resources\temp\{role identifier}\RoleTemp.

Mengatur executionContext dengan tepat untuk tugas startup

Atur hak istimewa dengan tepat untuk tugas permulaan. Terkadang tugas startup harus berjalan dengan hak istimewa yang ditinggikan meskipun peran berjalan dengan hak istimewa normal.

Atribut executionContext menetapkan tingkat hak istimewa tugas startup. Menggunakan executionContext="limited" berarti tugas startup memiliki tingkat hak istimewa yang sama dengan peran. Menggunakan executionContext="elevated" berarti tugas startup memiliki hak administrator, yang memungkinkan tugas startup untuk melakukan tugas administrator tanpa memberikan hak istimewa administrator untuk peran Anda.

Contoh tugas startup yang memerlukan hak istimewa yang ditinggikan adalah tugas startup yang menggunakan AppCmd.exe untuk mengonfigurasi IIS. AppCmd.exe membutuhkan executionContext="elevated".

Menggunakan taskType yang sesuai

Atribut taskType menentukan cara tugas startup dijalankan. Ada tiga nilai: sederhana, latar belakang, dan latar depan. Tugas latar belakang dan latar depan dimulai secara asinkron, dan kemudian tugas-tugas sederhana dijalankan secara sinkron satu per satu.

Dengan tugas permulaan sederhana, Anda dapat mengatur urutan tugas yang dijalankan berdasarkan urutan tugas yang tercantum dalam file ServiceDefinition.csdef. Jika tugas sederhana diakhiri dengan kode keluar non-nol, maka prosedur startup berhenti dan peran tidak dimulai.

Perbedaan antara tugas startup latar belakang dan tugas startup latar depan adalah bahwa tugas latar depan menjaga peran tetap berjalan sampai tugas latar depan berakhir. Ini juga berarti bahwa jika tugas latar depan menggantung atau macet, peran tidak akan mendaur ulang sampai tugas latar depan dipaksa ditutup. Untuk alasan ini, tugas latar belakang direkomendasikan untuk tugas startup asinkron kecuali Jika Anda memerlukan fitur tugas latar depan.

Akhiri berkas batch dengan EXIT /B 0

Peran hanya akan dimulai jika errorlevel dari tugas startup sederhana Anda adalah nol. Tidak semua program mengatur errorlevel (kode keluar) dengan benar, sehingga file batch harus diakhiri dengan jika EXIT /B 0 semuanya berjalan dengan benar.

EXIT /B 0 Hilang di akhir file batch startup adalah penyebab umum peran yang tidak dimulai.

Catatan

Saya perhatikan bahwa file batch bersarang kadang-kadang berhenti merespons saat menggunakan parameter /B. Anda mungkin ingin memastikan bahwa masalah ini tidak terjadi jika file batch lain memanggil file batch Anda saat ini, seperti jika Anda menggunakan pembungkus log. Anda dapat menghilangkan /B parameter dalam kasus ini.

Mengharapkan tugas startup berjalan lebih dari sekali

Tidak semua daur ulang peran termasuk mulai ulang, tetapi semua daur ulang peran termasuk menjalankan semua tugas startup. Ini berarti bahwa tugas startup harus dapat berjalan beberapa kali antara mulai ulang tanpa masalah. Ini dibahas di bagian sebelumnya.

Gunakan penyimpanan lokal untuk menyimpan file yang harus diakses dalam peran

Jika Anda ingin menyalin atau membuat file selama tugas startup Anda yang kemudian dapat diakses oleh peran Anda, maka file tersebut harus ditempatkan di penyimpanan lokal. Lihat bagian sebelumnya.

Langkah berikutnya

Meninjau model dan paket layanan awan

Pelajari selengkapnya tentang cara kerja yang.

Buat dan sebarkan paket layanan awan Anda.