मेरे पास बैच फ़ाइलों में कई स्टार्टअप कार्य हैं। विशेष रूप से मैं आईआईएस को कॉन्फ़िगर करने के लिए आईआईएस के appcmd.exe
पर कॉल करता हूं। Azure में स्टार्टअप कार्यों को किसी कारण से भूमिका को पुनरारंभ करने के मामले में बेवकूफ माना जाता है (यानी, एक ही परिणाम के साथ बार-बार चलाने में सक्षम)। दुर्भाग्य से मेरे कई आईआईएस कॉन्फ़िगरेशन कमांड दूसरी बार असफल हो जाएंगे, उदाहरण के लिए, क्योंकि वे पहली बार कॉन्फ़िगरेशन नोड को हटाते हैं जो बाद के रनों पर मौजूद नहीं होता है।स्टार्टअप कार्यों को बेवकूफ़ बनाने के लिए कैसे करें?
मेरा सवाल है, मैं इन स्टार्टअप कार्यों को बेवकूफ कैसे बना सकता हूं? क्या appcmd.exe त्रुटियों को फेंकने का कोई तरीका नहीं है? क्या खोल को त्रुटियों को पकड़ने का कोई तरीका है? क्या Azure ढांचे को त्रुटियों को अनदेखा करने का कोई तरीका है?
यहां मेरे स्टार्टअप कार्यों का एक उदाहरण दिया गया है। यह सब एक कमांड फ़ाइल, configiis.cmd
में निहित है।
@REM Enable IIS compression for application/json MIME type
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost
@REM Set IIS to automatically start AppPools
%windir%\system32\inetsrv\appcmd.exe set config -section:applicationPools -applicationPoolDefaults.startMode:AlwaysRunning /commit:apphost
@REM Set IIS to not shut down idle AppPools
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00 /commit:apphost
@REM But don't automatically start the AppPools that we don't use, and do shut them down when idle
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='Classic .NET AppPool'].startMode:OnDemand" "/[name='Classic .NET AppPool'].autoStart:False" "/[name='Classic .NET AppPool'].processModel.idleTimeout:00:01:00" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='ASP.NET v4.0'].startMode:OnDemand" "/[name='ASP.NET v4.0'].autoStart:False" "/[name='ASP.NET v4.0'].processModel.idleTimeout:00:01:00" /commit:apphost
%windir%\system32\inetsrv\appcmd.exe set config -section:system.applicationHost/applicationPools "/[name='ASP.NET v4.0 Classic'].startMode:OnDemand" "/[name='ASP.NET v4.0 Classic'].autoStart:False" "/[name='ASP.NET v4.0 Classic'].processModel.idleTimeout:00:01:00" /commit:apphost
@REM remove IIS response headers
%windir%\system32\inetsrv\appcmd.exe set config /section:httpProtocol /-customHeaders.[name='X-Powered-By']
बहुत यकीन है कि अप्रयुक्त ऐपपूल को स्वचालित रूप से शुरू करने से रोकने वाली लाइनें काम नहीं करेंगी। 'क्लासिक .NET AppPool' इत्यादि का उपयोग करने के बजाय आपको Clr2ClassicAppPool आदि का उपयोग करने की आवश्यकता है। –
वास्तव में वे नाम ठीक काम करते हैं, लेकिन इसे थोड़ा अलग उद्धृत करने की आवश्यकता थी। मैंने ऊपर दिए गए कोड को अपडेट किया है, बस अगर कोई इसे बाद में देखता है। –