
背景:
私自身は、カナダのトロントにある証券会社の技術部門で働いています。 また、カルガリーに別のオフィスがあります。 どういうわけか、リモートオフィスの単一のドメインコントローラーにWindows更新プログラムを計画的にインストールした後、外部ソースとの時刻の同期を担当するW32Timeサービスが開始されませんでした。 したがって、約1週間以内に、サーバーの時間が約20秒失われました。 そのときのデフォルトのワークステーションは、コントローラーから時間を受け取りました。 あなたは何が起こったか理解しています。 入札時間は非常に重要であり、秒単位の差は多くの問題を解決できます。 残念ながら、最初の時間差はブローカーによって気づかれました。 基本的に3人で構成されるテクニカルサポート部門がこれに割り当てられました。 何かをすることが急務でした。 解決策は、CentOSを実行している内部NTPサーバーにすべてのマシンを送信するグループポリシーを適用することでした。 ドメインコントローラをWebフィルタに接続するサービスであるDC Barracuda Agentにはまだ問題があり、いくつかのサービスが不安を引き起こすことがありました。 それにもかかわらず、私たちはいくつかのサービスを追跡するために何かを考え出すことにしました。 私は少しグーグルで調べて、多くの解決策があり、ほとんどがこの問題のために商業的であることに気づきましたが、ある種のスクリプト言語を学びたかったので、私たちのローカルLinux達人を使ってPythonでスクリプトを書くことを志願しました。 その後、すべてのサービスをチェックし、その可用性とステータスを目的のサービスのリストと比較するスクリプトに変わりました。残念ながら、これらのサービスはマシンごとに個別に手動で実行する必要があります。
解決策:
Windowsサーバーの1つで、この種のPowerShellスクリプトを作成しました。
echo "Servername" > C:\Software\Services\Servername.txt get-date >> C:\Software\Services\Servername.txt Get-Service -ComputerName Servername | Format-Table -Property status, name >> C:\Software\Services\Servername.txt
私の場合、各サーバーにこのようなピースが10個ありました
次のバッチファイルがタスクスケジューラに追加されました(PowerShellスクリプトをそこから直接実行するよりも簡単に思えました)。
powershell.exe C:\Software\Services\cal01script.ps1
現在、私は毎日、同様の形式の各サーバーの個別のファイルにすべてのサービスのリストを受け取りました。
Servername Friday, October 26, 2012 1:24:03 PM Status Name ------ ---- Stopped Acronis VSS Provider Running AcronisAgent Running AcronisFS Running AcronisPXE Running AcrSch2Svc Running ADWS Running AeLookupSvc Stopped ALG Stopped AppIDSvc Running Appinfo Running AppMgmt Stopped aspnet_state Stopped AudioEndpointBuilder Stopped AudioSrv Running Barracuda DC Agent Running BFE Stopped BITS Stopped Browser Running CertPropSvc Running WinRM Stopped wmiApSrv Stopped WPDBusEnum Running wuauserv Stopped wudfsvc
今最も重要な部分。 CentOSを搭載した別のマシンで、このスクリプトを作成しました。
import sys import smtplib import string from sys import argv import os, time import optparse import glob
目的のサービスのダンプファイルとリストファイルは同じ名前にする必要があります。 監視しているサービス(desiredServices)のリストは次のようになります。
Acronis VSS Provider AcronisAgent AcronisFS AcrSch2Svc
スクリプトはサービスをチェックし、これをすべて1つの電子メールメッセージに作成します。結果に応じて、メッセージの件名にすべての順序が整っているか、エラーがあり、メッセージ本文にエラーがあることを明らかにします。 私たちにとっては、1日1回のチェックで十分なので、早朝にWindowsサーバーのステータスに関する通知を受け取ります。 WindowsサーバーからLinuxマシンにファイルをコピーするために、同僚は次のbashスクリプトを手伝ってくれました。
このスクリプトはエンコードも変更します。私のマシンではLinuxがUTF16を実際に使用したくなかったためです。 さらに、サービスを含むダンプからフォルダーを削除するために、バッチファイルをタスクスケジューラに追加して、ダンプを消去するPowerShellスクリプトを実行しました。
ボディシャツ:
powershell.exe C:\Software\Services\delete.ps1
Poweshellスクリプト:
remove-item C:\Software\Services\ServerName.txt
このプロジェクトは、サービスの監視とPythonのトレーニングという2つの目標を追求しました。 これはHabréに関する私の最初の投稿なので、すでに私のアドレスには批判の流入が予想されます。 特にこのシステムの改善に関してコメントがあれば、歓迎します。 私はこのようなソリューションを無料でメール通知で見つけられなかったので、この記事が誰かに役立つように願っています。 たぶん彼はひどく見ていました。