כיצד להשתמש Launchd כדי להפעיל סקריפטים על לוח זמנים ב - MacOS
Launchd הוא כלי להתחלה, עצירה וניהול סקריפטים ותהליכים. אם עבדת עם כל גירסה של לינוקס, ייתכן שאתה מכיר את cron. Launchd הוא בעצם cron ב macOS.
מה הם דמונים?
Daemons (מבוטא "שדים") הם סקריפטים הפועלים ברקע. שלא כמו יישומים, הדמונים לרוץ כמו תהליכים אינם תחת שליטה ישירה של המשתמש או יישום אחר. על MACOS הם תחת פיקודו של מסגרת launchd אשר מחליטה כאשר הם מתחילים ולעצור.
השם יוצא דופן מגיע השד של מקסוול, סוכן דמיוני ממין את המולקולות בניסוי חשב התרמודינמיקה.
כתיבת תסריטים
כדי להפעיל דמונים דרך Launchd, תצטרך לכתוב כמה סקריפטים. שפת scripting הנפוץ ביותר הוא bash. אם אתה רוצה ללמוד עוד על Scripting bash, אתה יכול לבדוק את המדריך למתחילים שלנו כדי לסרוק scripting.
באמצעות הפעלת
סקריפטים ב- launchd מופעלים על-ידי הגדרות עבודה שהן קובצי plist המאוחסנים בספריות ספציפיות. קבצי XML אלה מעניקים לתפקיד שם, לציין את התסריט שאמור להיות מופעל, ומציינים מתי יש להפעיל את הסקריפט. לאחר שכתבת את הסקריפט שלך, תכתוב ותטען הגדרת עבודה שמפעילה את הסקריפט בזמן המתאים.
הגדרת עבודה נראית כמו מה שמתואר להלן:
תווית local.restart תכנית /Users/user/Scripts/restart.sh RunAtLoad
שינוי לפי הצורך, ולאחר מכן לשים אותו בקובץ טקסט עם סיומת. Plist לפני הטלת אותו במדריך הנכון (ראה להלן).
ישנם מספר חלקים מרכזיים לתיאור התפקיד:
- תווית: שם התפקיד בתוך Launchd. חייב להיות ייחודי עבור כל עבודה. אלה כתובים בסימון תחום הפוך, ו "מקומי" הוא תחום גדול עבור סוכנים פרטיים.
- תוכנית: הנתיב המלא של התסריט תיאור זה משיקה את העבודה.
- RunAtLoad: מתאר מתי יש להפעיל את הסקריפט. ישנן מספר אפשרויות שונות כאן:
- RunAtLoad : הפעל מיד עם הגדרת הגדרת העבודה. פועל רק פעם אחת לכל עומס.
- StartInterval : התחל את העבודה כל n שניות. דוגמה זו תפעיל את העבודה כל 7200 שניות או כל 2 שעות.
StartInterval 7200 - StartCalendarInterval : הפעל את העבודה בשעה ותאריך ספציפיים. הקוד הבא יפעיל את העבודה בכל יום בשעה 9 בבוקר.
StartCalendarInterval שָׁעָה 9 דַקָה 0
סוכנים מול דמונים
לאחר שכתבת את תיאור התפקיד שלך, יהיה עליך לשמור אותו בספריה המתאימה.
ההשקה מבדילה עוד יותר בין סוכנים לדמונים. סוכן פועל בשם המשתמש המחובר, בעוד daemon פועל מתחת למשתמש הבסיס. משמעות הדבר היא שאם ברצונך להגביל סקריפט לחשבון משתמש מסוים, תוכל להשתמש בסוכן. אם אתה רוצה משהו לרוץ לא משנה מי מחובר, תשתמש daemon.
ההבדל בין הסוכנים והדמונים נמשך ממצב שבו הם נשמרים במחשב:
- "~ / Library / LaunchAgents" פועל בשם המשתמש המחובר
- "/ Library / LaunchDaemons" פועל בשם משתמשי הבסיס
יהיה עליך לשמור את plist במקום הנכון.
טוען מקומות עבודה לתוך
לאחר שיצרת את הסקריפטים שלך ושמרת את הסוכן שלך במקום הנכון, תצטרך לטעון אותו לתוך launchctl
. זה יקרה באופן אוטומטי על כניסות בעתיד.
כדי לראות מה פועל כרגע ב laucnhctl, אתה יכול להשתמש launchctl list
במסוף. רשימה ענקית זו יכולה להיות grepped עבור התסריט שלך על ידי תיוג זה עם משהו כמו הבאה:
רשימה grep local.restart
כדי לטעון קובץ Script, פתח את טרמינל והשתמש בפקודה הבאה:
העלאה Launchctl ~ / Library / LaunchAgents / local.restart.plist
כדי להסיר את הסקריפט מתור ההשקה, השתמש בפקודת 'ביטול טעינה':
לשחרר. לשחרר / / Library / LaunchAgents / local.restart.plist
טעינת עבודה מעבירה אותה לתור ההשקה, והתפקיד יפעל בזמן שצוין בתנאי ההשקה שלו. אם אתה רוצה להריץ סקריפט מיד לא משנה מה, אתה צריך להשתמש בפקודה "התחל":
הפעל את local.restart - -
פקודה זו לוקחת את התווית של העבודה והיא תפעל רק אם העבודה כבר נטענת לתוך launchctl
.
סיכום
ניתן להשתמש launchd כדי ליצור סקריפטים שעושים דברים כמו לנקות קבצים, להפעיל מחדש את השרת על לוח זמנים או להפעיל יישום כאשר קובץ מסוים מופיע. כדי ללמוד הרבה יותר על launchd, אתה יכול לבדוק את המדריך laucnhd.
קרדיט תמונה: Maxwell's_demon