תזמון סקריפט ב-cron

ShimiHi

New member
תזמון סקריפט ב-cron

הי,
אני בודק ידנית גודל מחיצות של כמה שרתי לינוקס שיש ללקוח.
ואם צריך מפנה מקום ידנית,
ז"א נכנס ב-ssh עם Putty, בודק ב-df
ואז נכנס עם winscp ומוחק מתיקיה ספציפית לוגים ישנים.
החלטתי לייעל את העניין, יצרתי קובץ checkdrives.sh
שמריץ את הפקודות:
df | grep /dev/sda1 > drives.txt
sendmail -v [email protected] < drives.txt

כשאני מריץ את זה ידנית sh ./checkdrives.sh זה שולח לי את גודל התיקיה למייל.
כשאני מתזמן את זה עם cron, אני רואה בלוגים שזה רץ אבל לא מקבל מייל,
השורה ב-cron:
6 20 * * * root /etc/checkdrives.sh

כלומר שירוץ כל יום ב-20:06

השורה בלוג:
Apr 22 20:06:01 servername /USR/SBIN/CRON[2604]: (root) CMD (/etc/checkdrives.sh)

מה לא עשיתי נכון בתזמון?
תודה!
 

Dניאל Mור

New member
נסיון מס' 1

שנה את שם הקובץ drives.txt לנתיב האבסולוטי (מלא) שלו *בכל מקום שמוזכר בסקריפט*.

נסה ועדכן - אם לא ילך, נמשיך לסייע עם עוד דברים על הכוונת.

בהצלחה.

+דניאל.
 

ShimiHi

New member
תודה על התשובה המהירה


שיניתי וחיכיתי לתזמון, אותו דבר.
ידנית זה רץ.
 

Dניאל Mור

New member
המשך

שאלה בסיסית ביותר: האם אתה בטוח שהקובץ drives.txt נוצר ומתעדכן כל פעם מחדש? מה הרעיון בשאלתי? בלי קשר לעניין שליחת הדוא"ל, להבין האם העבודה המתוזמנת שלך בכלל רצה. משם מתקדם.

מחכה לעדכון.

+דניאל.
 

Dניאל Mור

New member
חידוד הניסוח

שאני שואל "האם העבודה המתוזמנת רצה", אני מתכוון מעבר לשורה שמראה כך בלוג, דהיינו, האם הפקודות שבתוך הסקריפט אכן רצות (מה שמעניין אותי כרגע זו פקודת ה - df והפלט שלה. את פקודת הדוא"ל אתה יכול אפילו לשים ב - comment כרגע).

+דניאל.
 

ShimiHi

New member
הוא מתעדכן כל פעם

בדקתי גם לפי גודל המחיצה שנשלחת בתוכן
וגם לפי תאריך הקובץ עצמו.
כשאני מריץ ידנית זה משתנה וגם נשלח.
אין לוג יותר מפורט מהשורה ב-syslog?
 

ShimiHi

New member
אוקיי סידרתי את זה

שכחתי להוסיף ב-crontab את ה-sh לפני שם הקובץ. . .

לכן זה לא רץ

דניאל תודה בכל מקרה!
 

Dניאל Mור

New member
תודה על העדכון

ב - Remote Debugging צריך להתחיל מהשכבות הנמוכות והאלה.

כל הכבוד לך!


+דניאל.
 
פתרון עדיף, אולי - הוספת שורת קסם ושינוי הרשא

1. הוספת שורה בתחילת הקובץ שמיידעת את המערכת מה משמש להרצת התוכן:

sed -i.orig '1i#!/bin/sh' /etc/checkdrives.sh


יוסיף שורת !# לתחילת הסקריפט שמיידעת את המערכת באמצעות איזה אפליקציה לקרוא אותו (באש,פרל,CSH וכו') ויישמור עותק עם סיומת orig. כדי לאפשר חזרה מהירה למקור. ניתן לתת כל סיומת שתרצה, כמובן.

2. שינוי הרשאות - הוספת הרשאת ריצה לקובץ

chmod +x /etc/checkdrives.sh

מאפשר למע' להתייחס לקובץ כקובץ ביצוע, ולא קובץ תוכן לקריאה/כתיבה בלבד.
 

Dניאל Mור

New member
ואם כבר בטיפים עסקינן


סתם משהו שתפס את עיני, אני פחות אוהב לשמור את הסקריפטים שלי תחת /etc/, אלא למשל תחת /root/bin/ או מקום ייעודי כלשהוא, למשל תיקיית /scripts/ (לדוגמא). ממש לא חובה, סתם עניין של "הרגשת סדר" והרגלי עבודה.

אחלה ערב!

+דניאל.
 

hetzbh

New member
הסטנדרט קצת שונה

בד"כ (טוב, זה עוד ממש ממש ממזמן) מומלץ לשמור סקריפטים ב-usr/local/ (כמובן בהתאם למה שצריך , ספריות ב-lib, בינארי ב-bin וכו'), כאשר דברים שרק root יכול להריץ מומלץ לשים ב-usr/local/sbin/ - זה עוזר במיוחד כשאתה מנהל עשרות או מאות שרתים. לבית כמובן תשים היכן שתרצה
 
למעלה