08-03-2014, 17:49
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
אני לא מבין איך יכול להיות כלי כללי לבעייה אמורפית.
אפשר לתפור "פתרון" לשאלה שלך באמצעות כלים פשוטים למדי
נניח אם אתה רוצה כל שניה לראות איזה פרוססים רצים ואם משהו השתנה, אתה יכול לעשות סקריפט ש:
0. מגדיר שם קובץ זמני ואז עושה mv tmpname tmpname.old
1. רץ בלולאה - שופך את רשימת הפרוססים הנוכחית לקובץ tmpname (רק פרוססים, מסונן, לא כולל דברים שמשתנים דרך קבע כמו זמן מעבד, צריכת משאבים, וכו')
2. עושה diff tmpname tmpname.old
3. ומסתכל על הערך שחזר מ diff...
4. אם הוא שונה מ 0, הקבצים שונים = המצב השתנה. בצע מה שאתה רוצה שיקרה במקרה כזה - כתוב את זה לקובץ עם timestamp, נניח. אם הוא לא שונה, אל תעשה כלום
זה סקריפט של כמה שורות קוד...
אגב, גם ל watch יש פרמטר d- ש"מאיר" את השינויים מהריצה האחרונה - אבל אני חושב שזה לא יענה לך על השאלה של "מתי"... וגם לא מה קורה כשהשינוי משתנה הלוך וחזור כמה פעמים ולכן הצעתי את הנ"ל.
ככלל, אני לא חושב שבאופן כללי מגיעים "כלים" שאת מטרתם ניתן להשיג ב 2-3 פקודות קיימות - זה לא הגיוני לכסות כל דבר אפשרי - מה שיפה בלינוקס זה שיש לך מספיק כלים כדי לעשות כל דבר ב 2-3 פקודות לכל היותר
הנה, כתבתי לך משהו בקצרה... לא נבדק יותר מדי, אבל אמור להיות מספיק טוב בתור כיוון, לדעתי...
קוד:
#!/bin/bash
cleanup() {
echo ""
echo "Caught Ctrl+C, cleaning up temp files."
rm -f $NEWFILE $OLDFILE
exit 0
}
trap 'cleanup' SIGINT
WATCHCMD="ps axo pid,command"
INTERVAL=1
NEWFILE=$(mktemp) || (echo "Unable to create a file for new status" ; exit 1)
OLDFILE=$(mktemp) || (echo "Unable to create a file for old status" ; rm -f $NEWFILE ; exit 1)
SCHANGE=$(mktemp -d) && (echo "Logging changes of '$WATCHCMD' to directory $SCHANGE; Ctrl+C to stop.") || (echo "Unable to create log directory." ; rm -f $NEWFILE $OLDFILE ; exit 1)
$WATCHCMD | grep -v "$WATCHCMD" > $NEWFILE
while [ 1 ] ; do
mv -f $NEWFILE $OLDFILE
$WATCHCMD | grep -v "$WATCHCMD" > $NEWFILE
diff $OLDFILE $NEWFILE > /dev/null 2>&1
if [ $? -ne 0 ]
then
TSTAMP=$(date +%Y-%m-%d-%H-%M-%S)
echo "Change detected at $TSTAMP. Logging it into $SCHANGE/$TSTAMP.diff"
diff -u $OLDFILE $NEWFILE > $SCHANGE/$TSTAMP.diff
fi
sleep $INTERVAL
done
כמובן, שאם מה שאתה מחפש הוא בכלל מערכת monitoring כללית, יש גם כלים כאלה, כמו monit, שיודעים לעשות לא מעט דברים.
|