چکهای سفارشی با اسکریپت
در این آموزش
چکهای داخلی ServerMug چیزهای عمومی را میسنجند: دیسک، آپدیت، آنتیویروس و غیره. ولی هر شبکه چیزهای خاص خودش را دارد: صف چاپی که گیر میکند، بکاپی که باید هر شب ساخته شود، پوشهای که باید mount باشد. برای اینها یک اسکریپت کوتاه PowerShell یا bash در داشبورد مینویسید و سنسور آن را در فاصلههای منظم روی سرورها اجرا میکند. این قابلیت در همهٔ پلنها نیست؛ اگر بخش «اسکریپتها» برایتان کار نمیکند، با ما تماس بگیرید.
اول: رضایت محلی با –allow-scripts
اسکریپت با دسترسی SYSTEM در ویندوز و root در لینوکس اجرا میشود. اگر پنل بتواند بهتنهایی اجرای کد را روی سرورها روشن کند، هر کسی که به پنل نفوذ کند به همهٔ سرورها دسترسی کامل پیدا میکند. برای همین:
- اسکریپتها فقط روی سرورهایی اجرا میشوند که سنسورشان با
--allow-scriptsنصب شده باشد. - این اجازه در فایل تنظیمات محلی خود سرور ذخیره میشود و از داشبورد قابل روشن کردن نیست.
- روی بقیهٔ سرورها، چک اسکریپت با وضعیت «نامشخص» و توضیح «اجرای اسکریپت روی این سرور مجاز نیست» نمایش داده میشود.
در بالای صفحهٔ هر سرور، فیلد «اسکریپت سفارشی» نشان میدهد مجاز است یا نه. روی خود سرور هم خط scripts: allowed=true در خروجی servermug-agent status همین را میگوید.
دادن اجازه هنگام نصب
در صفحهٔ «افزودن سرور»، هنگام ساخت توکن گزینهٔ «اجازهی اجرای اسکریپتهای سفارشی روی این سرورها (--allow-scripts)» را تیک بزنید. دستورهای نصبی که ساخته میشوند -AllowScripts (ویندوز) یا --allow-scripts (لینوکس) را دارند. پیشنهاد من این است که برای سرورهایی که اسکریپت لازم دارند توکن جدا بسازید، نه اینکه اجازه را روی همهٔ سرورها بدهید.
دادن اجازه به سروری که قبلاً نصب شده
اجرای دوبارهٔ اسکریپت نصب روی سروری که همان نسخه را دارد کاری نمیکند، پس باید خود سنسور را با install دوباره ثبت کنید. به یک توکن معتبر نیاز دارید. سرور با همان شناسهٔ ماشین ثبت میشود، پس همان سرور قبلی با تاریخچهاش میماند.
# ویندوز (PowerShell با Run as Administrator)
& 'C:\Program Files\ServerMug\servermug-agent.exe' install --server 'https://INGEST_HOST' --token 'sm_enroll_TOKEN' --pin 'sha256:FINGERPRINT' --allow-scripts
# لینوکس
sudo servermug-agent install --server 'https://INGEST_HOST' --token 'sm_enroll_TOKEN' --pin 'sha256:FINGERPRINT' --allow-scripts
مقدار --server و --pin را از دستور نصب داشبورد یا خروجی status بردارید. برای پس گرفتن اجازه، همین دستور را بدون --allow-scripts اجرا کنید.
نوشتن اسکریپت
- به «تنظیمات» ← «اسکریپتها» بروید و «+ اسکریپت جدید» را بزنید.
- «نام» (مثلاً «صف چاپ») و «سیستمعامل / شل» را انتخاب کنید: «Windows — PowerShell» یا «Linux — bash».
- «گروه سرورها»: «همهٔ سرورهای این سیستمعامل» یا یک گروه.
- «هر چند دقیقه» (دستکم ۱) و «مهلت اجرا (ثانیه)» (۱ تا ۶۰۰) را تعیین کنید. اسکریپتی که از مهلت بگذرد متوقف میشود.
- «متن اسکریپت» را بنویسید، «فعال» را روشن بگذارید و «ذخیره» را بزنید. اسکریپت در گزارش بعدی به سنسورها میرسد.
قرارداد خروجی
| خروجی | معنا |
|---|---|
کد خروج 0 |
سالم |
کد خروج 1 |
هشدار |
کد خروج 2 |
بحرانی |
| هر کد دیگر، یا عبور از مهلت | نامشخص |
| متن خروجی (تا ۴ کیلوبایت) | توضیح چک در زبانهٔ «چکها» |
خط اول value=<عدد> |
یک سنجهٔ عددی به نام script.<id> هم ساخته میشود که نمودار و قانون سنجه میپذیرد |
چک با نام script:<id> در صفحهٔ سرور و قانونها دیده میشود؛ شناسه را در ستون «شناسهی چک» فهرست اسکریپتها میبینید. قانون پیشفرض «اسکریپتهای سفارشی» برای هر اسکریپتی که هشدار یا بحرانی شود پیامک میفرستد.
نمونه: سن آخرین بکاپ SQL Server (ویندوز)
$dir = 'E:\Backup\SQL'
$last = Get-ChildItem $dir -Filter *.bak -Recurse -ErrorAction SilentlyContinue |
Sort-Object LastWriteTime -Descending | Select-Object -First 1
if (-not $last) { "هیچ فایل بکاپی در $dir پیدا نشد"; exit 2 }
$hours = [math]::Round(((Get-Date) - $last.LastWriteTime).TotalHours, 1)
"value=$hours"
if ($hours -gt 48) { "آخرین بکاپ $hours ساعت پیش: $($last.Name)"; exit 2 }
if ($hours -gt 26) { "آخرین بکاپ $hours ساعت پیش: $($last.Name)"; exit 1 }
"آخرین بکاپ $hours ساعت پیش: $($last.Name)"; exit 0
این اسکریپت را با فاصلهٔ ۶۰ دقیقه و دامنهٔ گروه سرورهای دیتابیس اجرا کنید. اگر پایش کامل SQL Server لازم دارید، DBMug از همین خانواده برای همین کار ساخته شده است.
نمونه: پوشهٔ بکاپ mount باشد و پر نباشد (لینوکس)
#!/bin/bash
if ! mountpoint -q /mnt/backup; then echo "/mnt/backup mount نیست"; exit 2; fi
used=$(df --output=pcent /mnt/backup | tail -n 1 | tr -dc '0-9')
echo "value=$used"
if [ "$used" -gt 95 ]; then echo "پوشهٔ بکاپ $used٪ پر است"; exit 2; fi
if [ "$used" -gt 85 ]; then echo "پوشهٔ بکاپ $used٪ پر است"; exit 1; fi
echo "پوشهٔ بکاپ سالم است ($used٪)"; exit 0
توصیهها
- اسکریپت را اول دستی روی یک سرور اجرا کنید و کد خروج را با
$LASTEXITCODEیاecho $?ببینید. - اسکریپت فقط بخواند و گزارش کند. ServerMug عمداً ابزار اجرای دستور از راه دور نیست؛ اسکریپتی که سرویس ریاستارت کند یا فایل پاک کند، همان ریسکی را برمیگرداند که از آن پرهیز کردهایم.
- رمز و کلید را در متن اسکریپت ننویسید؛ متن اسکریپت در داشبورد برای همهٔ اعضای سازمان قابل مشاهده است.
- فاصلهٔ اجرا را بیدلیل کوتاه نکنید؛ برای بیشتر چکها ۵ دقیقه کافی است.
دستور نصب را از کجا بیاورید؟
در داشبورد، صفحهٔ «افزودن سرور» دستور آماده با توکن خودتان را میدهد. هنوز حساب ندارید؟ درخواست دمو بدهید.
ورود به داشبورد درخواست دمو