التنفيذ

الوظيفة

قم بتنفيذ أمر أو برنامج نصي مضمن (bash أو perl أو python) على المُجمِّع المهيأ للمهمة أو على مضيف بعيد محدد بواسطة عنوان IP الخاص بالجهاز عبر ssh. يمكن إدخال الأمر الذي يجب تشغيله إما عن طريق مسار الأمر مع وسيطات أمر اختيارية أو عبر برنامج نصي مضمن.

الإنذار

وقت التشغيل، رمز الخروج، قيمة الإرجاع <0-ن>، قيمة السلسلة <0-ن>

لا يجوز إنشاء/تعديل المهام التنفيذية إلا من قبل مستخدمين من نوع المسؤول لأنها تسمح بتنفيذ تعليمة برمجية عشوائية على مجمّع SKOOR أو الخادم (في حالة المجمّع المحلي).
يتم تنفيذ التعليمات البرمجية أو التعليمات البرمجية التي يتم إدخالها في مربع النص المضمنة بأذونات المستخدم المسؤول. لذلك يمكن تنفيذ أوامر محدودة فقط، ما لم يقم مسؤول لينكس (الجذر) بتمكين أوامر إضافية باستخدام sudo على سبيل المثال.

تنفيذ التفاصيل

عند تحديد خانة الاختيار تنفيذ عن بُعد، يتغير مربع الحوار ويسمح بإدخال منفذ ssh وبيانات الاعتماد لتشغيل الأمر أو البرنامج النصي عن بُعد:

لا يمكن للمهام المنفذة عن بعد إرسال ملفات التنبيه إلى الخادم. يمكن معالجة الملفات فقط على المجمع، وليس على الأنظمة البعيدة

عند تحديد زر الاختيار Inline Script يتغير الحوار ويسمح بإدخال رمز البرمجة النصية داخل مربع نص أكبر:

تنفيذ المعلمات

المعلمة

الوصف

التنفيذ عن بُعد

قم بتنشيط خانة الاختيار هذه لتشغيل الأمر أو البرنامج النصي عبر ssh

منفذ SSH

منفذ TCP الذي يستمع إليه خادم SSH

اسم المستخدم

حساب مستخدم موجود على الجهاز البعيد

كلمة المرور

كلمة المرور الصحيحة لحساب المستخدم على الجهاز البعيد

تنفيذ

برنامج:
تشغيل برنامج تنفيذي واحد

برنامج نصي مضمن:
تشغيل برنامج نصي كامل (سلسلة من الأوامر)، مما يسمح بتغذية مخرجات البرنامج النصي بقيم الإرجاع الفردية وقيم السلسلة ورسالة المعلومات

مسار البرنامج

المسار المطلق للأمر (البرنامج النصي أو الثنائي) المراد تنفيذه

برنامج نصي مضمن

مربع نصي حيث يمكن إدخال الأوامر والبرامج النصية الكاملة. يتم تشغيل البرامج النصية المضمنة باستخدام قذيفة /bin/sh بشكل افتراضي، ولكن باستخدام دوال التضمين الموجودة مسبقًا (انظر أدناه)، يمكن استخدام البرامج النصية للباش والبيرل والبايثون (انظر أدناه). تتمثل إحدى مزايا إضافة البرامج النصية داخل البرنامج النصي المضمن في أنه يتم تخزينها في قاعدة بيانات تكوين SKOOR ولا يلزم إدارة أي كود خارجي على مستوى نظام الملفات.

يمكن إدخال التعليقات بحرف التجزئة (#).

الوسيطة <ن>

يمكن تمرير وسيطة واحدة أو عدة وسيطات إلى الأمر. انقر فوق الزر + لإضافة وسيطات إضافية.

حفظ الإخراج في ملف

بشكل افتراضي يتم تخزين اسم الملف المدخل هنا ضمن /var/opt/run/eranger/eranger/collector/tmp على مجمّع محرك SKOOR وسيحتوي على الإخراج القياسي للأمر و/أو محتويات الخطأ القياسي. يوصى بشدة باستخدام اسم ملف فريد، على سبيل المثال باستخدام علامة $ID$$ الذي سيتم استبداله بمعرف المهمة (على سبيل المثال my_output_ID$$$.out). إذا تم استخدام أسماء ملفات بسيطة، فقد يحدث أن تكتب عدة مهام إلى نفس الملف

قمع وقت التشغيل

إذا تم تمكين خانة الاختيار هذه، يتم تجاهل وقت تشغيل كل مهمة ولا يتم حفظها في قاعدة البيانات ولا تعود قيمتها مرئية في قسم القيم. كما أن قيمته لم تعد متاحة للاستخدام في مواصفات حد الإنذار.

رمز الخروج

يسمح زر الوحدة بتحديد اسم لرمز الخروج الخاص بالقابلية للتنفيذ، بالإضافة إلى الوحدة والمقسوم عليه والوصف والدقة العددية.

قيم الإرجاع

يسمح بإضافة أي عدد من قيم الإرجاع بالنقر فوق الزر +. لكل قيمة من قيم الإرجاع، يظهر زر وحدة ويسمح بتحديد اسم قيمة الإرجاع بالإضافة إلى وحدتها ومقسومها ووصفها ودقتها العددية (عدد المنازل العشرية). إذا لم يتم تحديد أي قيم إرجاع، تتم قراءة رمز الإنهاء فقط.

قيم السلسلة

يسمح بإضافة أي عدد من قيم السلسلة بالنقر فوق الزر +. لكل قيمة من قيم السلسلة، يظهر زر وحدة ويسمح بتحديد اسم قيمة السلسلة بالإضافة إلى وحدتها ووصفها. يُستخدم فقط لمجموعة محدودة من السلاسل الثابتة المعروفة، وليس للسلاسل التي تتغير كثيرًا (والتي تحتوي على الوقت والتاريخ على سبيل المثال).

تسمح القائمة المنسدلة العلامات بإدخال متغيرات محددة مسبقًا في الحقول أعلاه، على سبيل المثال $NAME$ لاسم المهمة.

دليل العمل الخاص بتنفيذ البرنامج النصي هو /var/opt/oper/run/eranger/ollector، وبالتالي فإن تحديد مسار ملف نسبي مثل bin/script.sh داخل البرنامج النصي المضمن أو مسار البرنامج سيشير إلى /var/opt/run/eranger/erlector/bin/script.sh.

تنفيذ دوال التضمين لباش وبيرل وبايثون

يتيح تحديد زر الاختيار Inline Script إدخال نص برمجي في مربع النص الكبير. يتم دعم لغات البرمجة النصية لباش وبيرل وبايثون. توفر مهمة التنفيذ دوال تضمين مختلفة لهذه اللغات لتعيين مخرجات البرنامج النصي لقيم الإرجاع وقيم السلسلة ورسالة المعلومات. للتمكن من استخدام هذه الدوال، يجب تضمينها أولاً عن طريق توجيه المؤشر إلى السطر الأول في مربع نص البرنامج النصي المضمن واختيار دالة التضمين المقابلة لإحدى لغات البرمجة النصية الثلاث من القائمة المنسدلة Tags:

على سبيل المثال، تضيف إضافة عنصر دالة التضمين sh/bash عنصر الدالة sh/bash الشيفرة التالية إلى البرنامج النصي المضمن:

يمكن الآن استخدام الدوال التالية داخل النص البرمجي لتعيين القيم الرقمية والسلاسل إلى قيم الإرجاع وقيم السلسلة ورسالة المعلومات:

الدالة

الوصف

تعيينErangerValue

قم بتعيين قيمة رقمية واحدة إلى قيمة إرجاع محددة بفهرسها (1-ن)

تعيين قيمة رقمية متعددة إلى قيمة إرجاع متعددة

تعيين قيم رقمية متعددة إلى قيم إرجاع متعددة، مع إضافة قيم إرجاع وفقًا لعدد قيم الإدخال المحددة

تعيينErangerStringValue

تعيين سلسلة واحدة إلى قيمة سلسلة محددة بواسطة فهرسها (1-ن)

تعيينErangerErangerStringValues

تعيين سلاسل متعددة إلى قيم سلسلة، مع إضافة قيم سلسلة وفقًا لعدد سلاسل الإدخال المحددة

تعيينErangerErangerInfoMessage

تعيين قيمة رقمية أو سلسلة إلى محتويات رسالة معلومات المهمة

إضافةErangerErangerInfoMessage

إضافة قيمة رقمية أو سلسلة إلى محتويات رسالة معلومات المهمة

getLastErangerValue

الحصول على قيمة من آخر قياس حسب الفهرس (1-ن). في حالة عدم توفر قياس سابق، ستُرجع الدالة 0

getLastErangerErangerStringValue

الحصول على قيمة السلسلة من آخر قياس حسب الفهرس (1-ن). ستُرجع الدالة سلسلة فارغة إذا كان القياس السابق متاحًا الآن

قيم الإخراجErangerValues

إذا تمت إضافة أي قيم إرجاع أو قيم سلسلة أو محتويات رسالة معلومات باستخدام الدوال أعلاه، فيجب إضافة هذه الدالة كآخر عنصر في البرنامج النصي

تنفيذ القيم وحدود الإنذار

القيمة / حد الإنذار

الوصف

وقت التشغيل

الوقت الذي استغرقه تنفيذ الأمر أو البرنامج النصي (إلا إذا تم تعطيله عن طريق التحقق من معلمة قمع وقت التشغيل )

رمز الخروج

رمز الخروج للأمر أو البرنامج النصي

قيمة الإرجاع <0-ن>

قيمة عددية بدقة عدد صحيح أو نقطة عائمة. يمكن تعريف حدود الإنذار على جميع قيم الإرجاع المكوّنة.

قيمة سلسلة <0-ن>

قيمة سلسلة. تُستخدم فقط لمجموعة محدودة من السلاسل الثابتة المعروفة، وليس للسلاسل التي تتغير كثيرًا (والتي تحتوي على الوقت والتاريخ على سبيل المثال). يمكن تعريف حدود الإنذار على جميع قيم السلاسل المكوّنة.

رمز الخطأ

رمز خطأ عام للمهمة (انظر القسم رموز خطأ المهمة)

تنفيذ أمثلة

مثال 1 - تشغيل أمر واحد مع وسيطات سطر أوامر متعددة

ستقوم المعلمات التالية بتشغيل أمر sudo لتشغيل برنامج نصي لإعادة تشغيل خدمة التقارير في محرك SKOOR:

لا يلزم تحديد أي قيم إرجاع أو قيم سلسلة، سيتم فقط التحقق من رمز الخروج للأمر المدمج.

الإخراج 1

في حالة عدم عمل الأمر لسبب ما، أدخل اسم ملف في مربع النص حفظ الإخراج إلى معلمة الملف:

سيتم إعادة توجيه الإخراج القياسي و/أو الخطأ القياسي للأمر إلى ذلك الملف. يمكن عرضها من قسم قيمة المهمة:

انقر على زر تحديث الملف، يتحول اسم الملف إلى رابط:

انقر على الرابط لعرض مخرجات الأمر في علامة تبويب أو نافذة متصفح منفصلة:

Running /opt/eranger/bin/eRanger.sh with root privileges...
eRanger Server installation...
waiting up to 15 seconds for 7090 to terminate 

Stopping eranger-report[  OK  ]
Starting eranger-report[  OK  ]

مثال 2 - تشغيل برنامج نصي مضمن مع تضمين دوال باش

محتويات مربع النص البرمجيالمضمنة لحساب بسيط لرقم عشوائي:

. /opt/eranger/collector/eranger_exec_values.sh

newValue=$RANDOM
lastValue=$(getLastErangerValue 1)

diffValue=$(expr $newValue - $lastValue)

setErangerValues $newValue $diffValue
outputErangerValues

يجب تحديد قيمتي إرجاع كما تم تكوينهما في البرنامج النصي المضمن. في المثال التالي، تم تحديد القيمة الجديدة والفرق:

يتيح النقر على زر الوحدة تحديد تفاصيل القيمة:

الإخراج 2

مثال 3 - تشغيل برنامج نصي مضمن مع تضمين دوال باش واستخدام الخصائص المخصصة للمهمة كمتغيرات برنامج نصي

سيقوم ما يلي بتشغيل برنامج نصي محدد كمتغير مع وسيطات البرنامج النصي التي تم تمريرها من خاصية مخصصة. يقوم البرنامج النصي بتنزيل ملف محدد (الوسيطة 2) من خادم FTP (الوسيطة 1).

يجب تحديد الخاصية المخصصة لوسائط سطر الأوامر أولاً باستخدام قائمة المسؤول. انقر على زر المسؤول في الزاوية العلوية اليمنى من عرض التكوين، ثم حدد خصائص مخصصة من القائمة المنسدلة بحث:


انقر فوق الزر + في أسفل الشاشة. يظهر قسم الخصائص المضافة حديثًا:

قم بتسمية الخاصية المخصصة، ثم حدد أن هذه الخاصية المخصصة يجب أن تكون متاحة فقط لكائنات الوظيفة:

انقر فوق تطبيق، ثم ابحث عن معرّف الخاصية المضافة حديثًا عن طريق التمرير فوق اسمها بالماوس:

اخرج من قائمة المسؤول بالنقر على زر المسؤول مرة أخرى في الزاوية العلوية اليمنى. الخاصية المخصصة متاحة الآن لإضافتها إلى كل مهمة.

قم بإضافتها إلى مهمة التنفيذ واملأ معلمة (معلمات) سطر الأوامر للبرنامج النصي المشار إليه في البرنامج النصي المضمن:

في هذه الحالة هناك وسيطتان لسطر الأوامر، محددتان بمسافة.

أضف الآن محتويات مربع نص البرنامج النصي المضمن:

. /opt/eranger/collector/eranger_exec_values.sh

SCRIPT="/var/opt/run/eranger/bin/ftp_download_local.sh"

PARAMS="$OID_74$"

VALUE=$(${SCRIPT} ${PARAMS})
setErangerValue 1 $VALUE
outputErangerValues

ثم أضف 1 قيمة الإرجاع:

يقوم البرنامج النصي بإرجاع سرعة تنزيل FTP بالكيلو بايت/ثانية، لذا يجب إضافة مقسوم عليه للتحويل إلى ميغابايت/ثانية.

تتمثل الميزة الرئيسية لاستخدام الخصائص المخصصة لتغذية الوسيطات في أنه يمكن للمرء إعادة استخدام نفس كتلة التعليمات البرمجية النصية المضمنة للعديد من المهام باستخدام قالب مهمة (انظر القسم قوالب) وتختلف الخاصية المخصصة فقط بين المهام المختلفة.

الإخراج 3

مثال 4 - تشغيل برنامج نصي مضمن مع تضمين دوال باش واستخدام استدعاء ssh عن بعد

يقوم البرنامج النصي المضمن التالي بتشغيل أمر عن بعد باستخدام أمر ssh. الافتراض هو، أن مصادقة ssh مهيأة بالفعل باستخدام مفاتيح عامة بدون كلمة مرور، لذلك لا يتم طلب كلمة مرور عند الاتصال بخادم ssh البعيد.

يقرأ الأمر عدد عمليات ddclient التي تعمل عن بعد. يتم استخدام المتغير الداخلي $DEVICE_ADDRESS$.

. /opt/eranger/collector/eranger_exec_values.sh

cmd="ps -u root | grep 'ddclient - ' | wc -l"
num_procs=$(ssh -o ConnectTimeout=15 -o ConnectionAttempts=1 eranger@$DEVICE_ADDRESS$ "$cmd")

setErangerValue 1 $num_procs
outputErangerValues

إضافة 1 قيمة الإرجاع:

الإخراج 4

مثال 5 - تشغيل الأمر عن بعد عبر ssh

يستخدم المثال التالي خانة الاختيار تنفيذ عن بعد للتمكن من إدخال بيانات اعتماد مصادقة ssh وتشغيل أمر على جهاز بعيد:

لا يمكن استخدام أي قيم إرجاع أو قيم سلسلة عند التنفيذ عن بُعد، يتم التحقق من رمز الإنهاء فقط.

الإخراج 5

مثال 6 - تشغيل استعلام WMI على خادم Windows 2000 وقراءة سجل الأحداث الخاص به

استخدم البرنامج النصي المضمن التالي:

. /opt/eranger/collector/eranger_exec_values.sh

# this does a wmi query to windows 2000 servers
# for server 2003 upwards, use the dedicated "Agent Eventlog"
# job plugin directly.
# for the query to work, port tcp135 and the portrange tcp1025-tcp65535 
# must be accessible from this collector to the remote windows server

# BEWARE: when querying the eventlog for lots of events, especially events
# of severity 3, the query can take a very long time, sometimes hours.
# However, the maximum allowed runtime of a SKOOR execute job is merely 5
# minutes after which the job will kill this script and exit with a warning

# login credentials for wmi query (needs to be either an administrator 
# account or must have sufficient privileges to do remote wmi queries

USER=skoor
PWD=<fill in password here>

# Filter parameters (uncomment only parameters that are used)

# Logfile can be \'Application\', \'Security', 
# \'System\', or e.g. \'CustomEventLog\'
Logfile=\'Application\'

# Event source (always enclose in \'....\')
SourceName=\'FEP\'

# Event ID
#EventCode=203

# Severity (1=Error, 2=Warning, 3=Information, 
# 4=Security Audit Success, 5=Security Audit Failure)
EventType=1

# Event description (find events that contain the following string(s) 
# anywhere in the event description)
#Message='string1'
#Message='string1|string2' (for filtering multiple strings inside message field, use pipe delimiter)
Message='WSAECONNREFUSED'

# search only events which have been logged
# during the last XXX minutes (always adapt 
# to job execution interval)
Maxage=3

################################################3

Maxagesec=$((Maxage*60))
Tepoch=$(date +%s)
Tstart=$((Tepoch-Maxagesec))
# get start time in UTC
Tstart_datetime=\'$(date -u -d @$Tstart +%Y%m%d%H%M00.000000+000)\'

# construct query
Query="Select Logfile,Message,RecordNumber from Win32_NTLogEvent where Logfile=${Logfile} and TimeWritten>${Tstart_datetime}"
[ ! -z "${SourceName}" ] && Query+=" and SourceName=${SourceName}"
[ ! -z "${EventCode}" ] && Query+=" and EventCode=${EventCode}"
[ ! -z "${EventType}" ] && Query+=" and EventType=${EventType}"
echo "WMI Query is ${Query}"

wmic -U ${USER}%${PWD} //$DEVICE_ADDRESS$ "${Query}" > $DEVICE_NAME$_$ID$_eventlog.out
RC=$?

if [ ! -z "${Message}" ]; then
   Eventcount=$(grep -v dcerpc_connect $DEVICE_NAME$_$ID$_eventlog.out | grep -v 'Login to remote object' | egrep ${Message} | wc -l)
else
   Eventcount=$(grep -v dcerpc_connect $DEVICE_NAME$_$ID$_eventlog.out | grep -v 'Login to remote object' | wc -l)
fi

setErangerValue 1 $Eventcount
setErangerValue 2 $RC
outputErangerValues

ثم أضف قيمتي إرجاع:


الإخراج 6

مثال 7 - تحميل wget مع الإنهاء التلقائي بعد 45 ثانية

استخدم الترميز التالي للتأكد من إنهاء الأمر الخارجي (wget في هذه الحالة) تلقائيًا إذا تم تشغيله لمدة تزيد عن 45 ثانية:

(sleep 45; kill -9 -$$) &
wget -O /dev/null http://www.debian.org/netinst.iso