PDA

View Full Version : Xin script kiểm tra trạng thái của services!


Green IT
08-14-2009, 11:57 AM
Tình hình là công ty em hay bị mất điện (em đã đề xuất mua thiết bị lưu diện và máy phát điện phòng ngừa rồi). tuy nhiên công ty em có nhiều chi nhánh ỏ các chi nhánh đó hổng có IT. Nếu mõi lần cúp điện thì việc liên lạc giữa công ty tổng và chi nhánh bị đứt, vì lý do là mõi làn cup điện thì server khởi động lại và 1 vài services ko thể tự khởi động được. Giờ em muốn tìm 1 cái tool hay scipt nào đó có khả năng phát hiện được những services nào chưa start và start cái services đó luôn. Mong các pro giúp đỡ!

andrew
08-14-2009, 12:51 PM
Tình hình là công ty em hay bị mất điện (em đã đề xuất mua thiết bị lưu diện và máy phát điện phòng ngừa rồi). tuy nhiên công ty em có nhiều chi nhánh ỏ các chi nhánh đó hổng có IT. Nếu mõi lần cúp điện thì việc liên lạc giữa công ty tổng và chi nhánh bị đứt, vì lý do là mõi làn cup điện thì server khởi động lại và 1 vài services ko thể tự khởi động được. Giờ em muốn tìm 1 cái tool hay scipt nào đó có khả năng phát hiện được những services nào chưa start và start cái services đó luôn. Mong các pro giúp đỡ!

Bạn có thể mô tả rõ hơn vấn đề "không thể tự khởi động được" hay không? Cụ thể đó là những service nào? Thường thì khi để ở chế độ 'Automatic' thì các service sẽ tự khởi động trong quá trình Windows khởi động. Nếu các service không tự khởi động được thì nguyên nhân thường là do ổ cứng bị lỗi (vì bị tắt đột ngột). Về lý thuyết, tính năng tự động quét ổ cứng khi tắt máy của Windows sẽ giải quyết vấn đề này. Tuy nhiên, có thể sau nhiều lần bị cúp điện thì ổ cứng của bạn bị bad sector (ở mức độ nhẹ, độ nặng hơn thì Windows sẽ 'die' luôn, mất dữ liệu...).

Vậy công việc đầu tiên là bạn nên backup dữ liệu ở các chi nhánh, kiểm tra thật kỹ các ổ cứng đang bị tình trạng không khởi động services được.

Green IT
08-14-2009, 02:30 PM
Chi nhánh em có 1 con Server cài chungg DC và EXCHANGE. Mõi lần bị cúp điện là gặp rắc rối. Những services của Exchange start dựa vào DC. Nhưng 2 thằng này khởi động cùng lúc do đó mấy cái services của Exchange không thể nào start được (Vì thằng DC chưa start xong). Phải đợi đến khi nào cái server đó khởi động xong thì mới start các dịch vụ của Exchange (start bằng tay do IT làm) được. Em muốn là có 1 cái script hay tool nào đó chạy như 1 dịch vụ nó sẽ kiểm tra trạng thái các services này và start nó đến khi nào nó start được mới thôi. Mong các bác giúp đỡ em!

andrew
08-14-2009, 03:36 PM
Chi nhánh em có 1 con Server cài chungg DC và EXCHANGE. Mõi lần bị cúp điện là gặp rắc rối. Những services của Exchange start dựa vào DC. Nhưng 2 thằng này khởi động cùng lúc do đó mấy cái services của Exchange không thể nào start được (Vì thằng DC chưa start xong). Phải đợi đến khi nào cái server đó khởi động xong thì mới start các dịch vụ của Exchange (start bằng tay do IT làm) được. Em muốn là có 1 cái script hay tool nào đó chạy như 1 dịch vụ nó sẽ kiểm tra trạng thái các services này và start nó đến khi nào nó start được mới thôi. Mong các bác giúp đỡ em!

Mình thấy cơ hội bạn tìm được một tool hay script như bạn mô tả là rất nhỏ. Vì bản chất sự việc nằm ở hai chỗ: cúp điện, và vấn đề cài chung Exchange với DC. Bạn nên giải quyết tận gốc sự việc bằng cách trang bị UPS/máy phát điện và/hoặc tách riêng Exchange với DC ra (dĩ nhiên là nếu ngân quỹ cho phép). Còn nếu nhất định dùng tool hay script thì có lẽ bạn phải tự nghiên cứu và viết lấy cho mình. Vì không ai viết sẵn một script hoặc tool có chức năng dị thường như vậy (viết để làm gì? Ai sẽ sử dụng?).

Xa hơn, nếu không trang bị UPS/máy phát điện thì sớm muộn hệ thống của bạn sẽ phát sinh rất nhiều lỗi do hiện tượng tắt điện đột ngột.

microsoftvn
08-14-2009, 04:23 PM
Chính xác như andrew nói, bạn nên trang bị UPS cho server sớm nhất có thể,
Giải thích thêm 1 chút:
Microsoft không khuyến khích cài exchange lên 1 máy DC duy nhất vì khi cài exchange lên DC, exchange service sẽ trở thành topology master, vì vậy khi thằng Active Directory Service (LSASS.exe) mà chưa khởi động xong thì các dịch vụ exchange sẽ không khởi động được, vì Exchange phụ thuộc vào AD.

Trước mình cũng có gặp trường hợp này và dùng script sau đây thì ổn
save đoạn sau thành file .vbs

'Đặt thời gian dưới đây cho phù hợp với con server của bạn nhé - the default is 20 seconds.
Const ServiceWaitTimeOut = 20000
Const ArbitWaitTime = 15000
CheckServices
Wscript.Sleep ArbitWaitTime
StartServices
Sub ConfigureServices
strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName = 'Microsoft Exchange Information Store'")

For Each objService in colServiceList
errReturnCode = objService.Change( , , , , "Manual")
Next
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName = 'Microsoft Exchange MTA Stacks'")

For Each objService in colServiceList
errReturnCode = objService.Change( , , , , "Manual")
Next
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName = 'Microsoft Exchange Routing Engine'")

For Each objService in colServiceList
errReturnCode = objService.Change( , , , , "Manual")
Next

Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName = 'Microsoft Exchange System Attendant'")

For Each objService in colServiceList
errReturnCode = objService.Change( , , , , "Manual")
Next

Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName = 'IIS Admin Service'")

For Each objService in colServiceList
errReturnCode = objService.Change( , , , , "Manual")
Next

Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName = 'World Wide Web Publishing Service'")

For Each objService in colServiceList
errReturnCode = objService.Change( , , , , "Manual")
Next

Set objWMIService = Nothing
Set colServiceList = Nothing

End Sub
Sub CheckServices
strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colServiceList = objWMIService.ExecQuery ("Select StartMode from Win32_Service where DisplayName = 'Microsoft Exchange Information Store'")

For Each objService in colServiceList
strMode = objService.StartMode
If StrMode = "Auto" Then
Call ConfigureServices
End If
Next

Set colServiceList = objWMIService.ExecQuery ("Select StartMode from Win32_Service where DisplayName = 'Microsoft Exchange MTA Stacks'")

For Each objService in colServiceList
strMode = objService.StartMode
If StrMode = "Auto" Then
Call ConfigureServices
End if
Next

Set colServiceList = objWMIService.ExecQuery ("Select StartMode from Win32_Service where DisplayName = 'Microsoft Exchange Routing Engine'")

For Each objService in colServiceList
strMode = objService.StartMode
If StrMode = "Auto" Then
Call ConfigureServices
End if
Next

Set colServiceList = objWMIService.ExecQuery ("Select StartMode from Win32_Service where DisplayName = 'Microsoft Exchange System Attendant'")

For Each objService in colServiceList
strMode = objService.StartMode
If StrMode = "Auto" Then
Call ConfigureServices
End if
Next

Set colServiceList = objWMIService.ExecQuery ("Select StartMode from Win32_Service where DisplayName = 'IIS Admin Service'")

For Each objService in colServiceList
strMode = objService.StartMode
If StrMode = "Auto" Then
Call ConfigureServices
End if
Next

Set colServiceList = objWMIService.ExecQuery ("Select StartMode from Win32_Service where DisplayName = 'World Wide Web Publishing Service'")

For Each objService in colServiceList
strMode = objService.StartMode
If StrMode = "Auto" Then
Call ConfigureServices
End if
Next

Set objWMIService = Nothing
Set colServiceList = Nothing
Set strMode = Nothing

End Sub
Sub StartServices
strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName ='IIS Admin Service'")

For each objService in colServiceList
errReturn = objService.StartService()
Next

Wscript.Sleep ServiceWaitTimeOut

Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName ='World Wide Web Publishing Service'")

For each objService in colServiceList
errReturn = objService.StartService()
Next

Wscript.Sleep ServiceWaitTimeOut

Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName ='Microsoft Exchange System Attendant'")

For each objService in colServiceList
errReturn = objService.StartService()
Next

Wscript.Sleep ServiceWaitTimeOut
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName ='Microsoft Exchange Information Store'")

For each objService in colServiceList
errReturn = objService.StartService()
Next

Wscript.Sleep ServiceWaitTimeOut
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where DisplayName ='Microsoft Exchange MTA Stacks'")

For each objService in colServiceList
errReturn = objService.StartService()
Next

Set colServices = objWMIService.ExecQuery ("SELECT * FROM win32_Service WHERE DisplayName = 'Microsoft Exchange Routing Engine'")
For Each objService in colServices
errReturnCode = objService.StartService()
Next

Set objWMIService = Nothing
Set colServiceList = Nothing

End Sub



Cài đặt script

Save đoạn script trên thành file CVCCNF.vbs vào thư mục c:\ExchStart
Vào Active Directory Users and Computers – tìm đến “Domain Controllers” OU – phải chuột rồi chọn “Properties”:
http://79.170.40.236/flangemanifold.com/images/ad.jpg

Tìm “Group Policy” tab, sau đó chọn “Default Domain Controllers Policy” chọn“Edit”:
http://79.170.40.236/flangemanifold.com/images/ad1.jpg

TÌm “Computer Configuration->Windows Settings->Scripts” bên tay phải sẽ có phần “Startup” và “Shutdown” – chọn phải chuột vào “Startup” scripts sau đó chọn “Properties”:
http://79.170.40.236/flangemanifold.com/images/ad2.jpg

màn hình nhập script
http://79.170.40.236/flangemanifold.com/images/ad3.jpg

add cái script vừa save vào:
http://79.170.40.236/flangemanifold.com/images/ad4.jpg
chọn “OK”, xong “OK” tiếp để kết thúc.
Tiếp theo tìm vào folder C:\ExchStart\ chạy cái script này SVCCNF.vbs script 1 lần trước (để set tham số).
thế là xong,
Hy vọng không bị lỗi nữa :)

Green IT
08-15-2009, 11:55 AM
thanks mấy bác đã giúp đỡ em nhiều! kiểu này nếu làm hổng được nữa chắc phải cương quyết với sếp thôi. Em sẽ cố gắng để không phụ lòng mấy bác!

Mấy bác có lòng thì giúp em cho trót luôn ạ. E gặp rắc rối ở đây nữa!
http://ictvietnam.net/forum/showthread.php?t=9262