Πώς να χρησιμοποιήσετε το launchd για να εκτελέσετε δέσμες ενεργειών στο Schedule στο macOS
Το launchd είναι ένα εργαλείο για την εκκίνηση, τη διακοπή και τη διαχείριση σεναρίων και διαδικασιών. Εάν έχετε εργαστεί με οποιαδήποτε έκδοση του Linux, μπορεί να είστε εξοικειωμένοι με το cron. Το launchd είναι βασικά cron στο macOS.
Τι είναι οι δαίμονες;
Οι δαίμονες (προφέρονται "δαίμονες") είναι σενάρια που εκτελούνται στο παρασκήνιο. Σε αντίθεση με τις εφαρμογές, οι δαίμονες λειτουργούν ως διαδικασίες και δεν βρίσκονται υπό τον άμεσο έλεγχο του χρήστη ή άλλης εφαρμογής. Στις macOS είναι υπό την καθοδήγηση του εκτοξευόμενου πλαισίου το οποίο αποφασίζει πότε αρχίζουν και σταματούν.
Το ασυνήθιστο όνομα προέρχεται από τον δαίμονα του Maxwell, έναν φανταστικό παράγοντα που ταξινομεί τα μόρια σε ένα πείραμα θερμοδυναμικής.
Γράφοντας σενάρια
Για να τρέξετε δαίμονες μέσω της εκτόξευσης, θα χρειαστεί να γράψετε ορισμένα σενάρια. Η πιο συνηθισμένη γλώσσα προγραμματισμού είναι bash. Αν θέλετε να μάθετε περισσότερα σχετικά με τη δέσμη ενεργειών bash, μπορείτε να δείτε τον οδηγό του αρχαρίου για την εκκίνηση scripting.
Χρησιμοποιώντας το launchd
Οι δέσμες ενεργειών στο 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
Παράγοντες έναντι δαίμονες
Μόλις γράψετε την περιγραφή εργασίας σας, θα πρέπει να την αποθηκεύσετε στον κατάλληλο κατάλογο.
ξεκίνησε περαιτέρω διακρίσεις μεταξύ πράκτορες και δαίμονες. Ένας πράκτορας τρέχει για λογαριασμό του συνδεδεμένου χρήστη, ενώ ένας δαίμονας τρέχει κάτω από τον χρήστη του root. Αυτό σημαίνει ότι αν θέλετε να περιορίσετε μια δέσμη ενεργειών σε έναν συγκεκριμένο λογαριασμό χρήστη, μπορείτε να χρησιμοποιήσετε έναν παράγοντα. Αν θέλετε κάτι να τρέξει ανεξάρτητα από το ποιος είναι συνδεδεμένος, θα χρησιμοποιήσετε έναν δαίμονα.
Η διαφορά μεταξύ πράκτορες και δαίμονες προέρχεται από το σημείο όπου αποθηκεύονται στον υπολογιστή:
- "~ / Library / LaunchAgents" τρέχει για λογαριασμό του συνδεδεμένου χρήστη
- "/ Library / LaunchDaemons" εκτελείται εξ ονόματος των root χρηστών
Θα χρειαστεί να αποθηκεύσετε το πιάτο σας στη σωστή θέση.
Φόρτωση εργασιών στο εκτυπωτή
Μόλις δημιουργήσετε τα σενάρια σας και αποθηκεύσετε τον πράκτορα σας στη σωστή θέση, θα πρέπει να το φορτώσετε σε launchctl
. Αυτό θα συμβεί αυτόματα στις συνδέσεις στο μέλλον.
Για να δείτε τι τρέχει αυτή τη στιγμή στο laucnhctl, μπορείτε να χρησιμοποιήσετε launchctl list
στο τερματικό. Αυτή η γιγαντιαία λίστα μπορεί να χτυπηθεί για το σενάριό σας, επισημαίνοντάς την με κάτι σαν το εξής:
λίστα εκτοξεύσεων | grep local.restart
Για να φορτώσετε μια δέσμη ενεργειών, ανοίξτε το Terminal και χρησιμοποιήστε την ακόλουθη εντολή:
εκκίνηση φορτίου ~ / Library / LaunchAgents / local.restart.plist
Για να καταργήσετε τη δέσμη ενεργειών από την ουρά εκτόξευσης, χρησιμοποιήστε την εντολή unload
:
εκκίνηση εκφορτώστε ~ / Library / LaunchAgents / local.restart.plist
Η φόρτωση μιας εργασίας το τοποθετεί στην ουρά εκτόξευσης και η εργασία θα τρέξει την ώρα που καθορίστηκε στις συνθήκες εκτόξευσής της. Αν θέλετε να εκτελέσετε αμέσως μια δέσμη ενεργειών ανεξάρτητα από το τι θα πρέπει να χρησιμοποιήσετε την εντολή "Έναρξη":
ξεκινήστε την εκκίνηση του local.restart
Αυτή η εντολή παίρνει την ετικέτα της εργασίας και θα λειτουργήσει μόνο εάν η εργασία έχει ήδη φορτωθεί στο launchctl
.
συμπέρασμα
Μπορείτε να χρησιμοποιήσετε το launchd για να δημιουργήσετε σενάρια που κάνουν πράγματα όπως καθαρισμός αρχείων, επανεκκίνηση του διακομιστή σας σε πρόγραμμα ή εκτέλεση μιας εφαρμογής όταν εμφανιστεί ένα συγκεκριμένο αρχείο. Για να μάθετε πολλά περισσότερα για την εκκίνηση, μπορείτε να δείτε το φροντιστήριο laucnhd.
Πιστοποίηση εικόνας: Maxwell's_demon