Jak uruchomić skrypt co, powiedzmy, 30 minut? Zakładam, że istnieją różne sposoby dla różnych systemów operacyjnych. Używam OS X.
Po prostu użyj launchd . Jest to bardzo potężny system uruchamiania, a tymczasem jest to standardowy system uruchamiania dla Mac OS X (obecna wersja OS X nawet nie uruchomiłaby się bez niego). Dla tych, którzy nie są zaznajomieni z launchd
(lub z OS X w ogóle), to jest jak krzyżówka init
, cron
, at
, sysvinit ( init.d
) inetd
, upstart
i systemd
. Zapożyczanie koncepcji wszystkich tych projektów, ale jednocześnie oferowanie rzeczy, których nie znajdziesz nigdzie indziej.
Każda usługa / zadanie to plik. Lokalizacja pliku zależy od pytań: „Kiedy ma działać ta usługa?” i „Jakich uprawnień będzie potrzebować usługa?”
Zadania systemowe idą do
/Library/LaunchDaemons/
czy będą działać, bez względu na to, czy jakikolwiek użytkownik jest zalogowany do systemu, czy nie. Zostaną uruchomione z uprawnieniami „root”.
Jeśli mają działać tylko wtedy, gdy zalogowany jest jakikolwiek użytkownik, przechodzą do
/Library/LaunchAgents/
i zostanie wykonany z uprawnieniami użytkownika, który właśnie się zalogował.
Jeśli mają działać tylko wtedy , gdy jesteś zalogowany, idą do
~/Library/LaunchAgents/
gdzie ~ jest katalogiem HOME. Zadanie to będzie działać z Twoimi uprawnieniami, tak jakbyś sam je uruchomił za pomocą wiersza poleceń lub dwukrotnego kliknięcia pliku w Finderze.
Zauważ, że tam też istnieje /System/Library/LaunchDaemons
i /System/Library/LaunchAgents
, jak zwykle, wszystkim pod kontrolą /System
zarządza OS X. Nie umieszczaj tam żadnych plików, nie zmieniaj tam żadnych plików, chyba że naprawdę wiesz, co robisz. Grzebanie w folderze Systemy może sprawić, że system stanie się bezużyteczny (doprowadzi go do stanu, w którym nawet odmówi ponownego uruchomienia). Są to katalogi, w których Apple umieszcza launchd
zadania, które uruchamiają system podczas rozruchu, automatycznie uruchamiają wymagane usługi, wykonują zadania konserwacji systemu i tak dalej.
Każde launchd
zadanie zawiera plik w formacie plist. Powinien mieć odwrotną notację nazwy domeny. Np. Możesz nazwać swoje zadanie
com.example.my-fancy-task.plist
Ta lista może mieć różne opcje i ustawienia. Pisanie po jednym na rękę jest nieoptymalne, możesz chcieć pobrać darmowe narzędzie Lingon do tworzenia zadań. To narzędzie było kiedyś bezpłatne, teraz kosztuje 5 USD w sklepie z aplikacjami i 10 USD w wersji innej niż App Store (wersja bez App Store jest znacznie wydajniejsza i jeśli już planujesz za nią zapłacić, poważnie, kup sklep bez aplikacji wersja). Jeśli ktoś zna porównywalne narzędzie, które jest darmowe lub open source, napisz mi w komentarzach, a ja raczej je polecę (nie chcę tutaj reklamować komercyjnego oprogramowania).
Na przykład może to wyglądać tak
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.my-fancy-task</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/usr/local/bin/my-script.sh</string>
</array>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
Ten agent będzie uruchamiał skrypt powłoki /usr/local/bin/my-script.sh co 1800 sekund (co 30 minut). Możesz także uruchomić zadanie w określonych dniach / godzinach (w zasadzie launchd może zrobić wszystko, co może zrobić cron) lub możesz nawet wyłączyć "OnDemand", powodując, że launchd utrzyma proces na stałe (jeśli zakończy się lub ulegnie awarii, launchd natychmiast go ponownie uruchomi) . Możesz nawet ograniczyć ilość zasobów, z których może korzystać proces (jak wspomniano wcześniej, Lingon pokazuje wszystkie te ustawienia w ładnym interfejsie UI).
Aktualizacja: mimo że OnDemand
jest nadal obsługiwana, jest przestarzała. Nowe ustawienie zostało nazwane KeepAlive
, co ma znacznie większy sens. Może mieć wartość logiczną, w którym to przypadku jest dokładnym przeciwieństwem OnDemand
(ustawienie false
zachowania tak, jakby OnDemand
było true
i na odwrót). Wspaniałą nową funkcją jest to, że może mieć również wartość słownikową zamiast wartości logicznej. Jeśli ma wartość słownikową, masz kilka dodatkowych opcji, które zapewniają lepszą kontrolę nad ziarnem, w jakich okolicznościach zadanie zostanie utrzymane przy życiu. Np. Jest utrzymywany przy życiu tak długo, jak długo program zakończył działanie z zerowym kodem zakończenia, tylko tak długo, jak istnieje określony plik / katalog na dysku, tylko wtedy, gdy inne zadanie również jest aktywne, lub tylko wtedy, gdy sieć jest aktualnie uruchomiona.
Możesz także ręcznie włączać / wyłączać zadania za pomocą wiersza poleceń:
launchctl <command> <parameter>
polecenie może być załadowane lub wyładowane, aby załadować plist lub ponownie go wyładować, w takim przypadku parametrem jest ścieżka do pliku. Lub polecenie może być uruchomieniem lub zatrzymaniem, aby po prostu uruchomić lub zatrzymać takie zadanie, w którym to przypadku parametrem jest etykieta (com.example.my-fancy-task). Istnieją również inne polecenia i opcje.
Zapoznaj się z dokumentacją Apple dotyczącą formatu plist i launchctl
narzędzia wiersza poleceń (pamiętaj, że możesz wybrać wersję OS X u góry, ponieważ format / opcje różnią się między różnymi wersjami OS X)
StartCalendarInterval
z tablicą dwóch słowników, zarówno z kluczem, jakMinute
i wartością raz00
i raz30
zrobiłby dokładnie to, o co prosiłeś. W przyszłości proszę zadawać pytania jako pytania, a nie komentarze, wtedy mogę również pokazać ostateczny słownik (nie mogę tego zrobić w komentarzu). Ta strona służy zadawaniu pytań. Jeśli chcesz podpowiedzieć komuś pytanie, zamieść link do pytania jako komentarz, ale nie samo pytanie.możesz użyć bardzo wygodnego generatora plist: http://launched.zerowidth.com/ (nie musisz niczego kupować…)
da ci on-liniową powłokę do zarejestrowania nowego zaplanowanego zadania z już zalecanym uruchomieniem d
źródło
W systemie MacOSX masz co najmniej następujące opcje:
Z własnego doświadczenia wynika, że najbardziej niezawodny jest cron. Kiedy testowałem, launchd miał wiele błędów i dziwactw. Alarmy iCal działają tylko wtedy, gdy jesteś zalogowany (ale może to być coś, co wolisz).
źródło
Jak zauważył Mecki, launchd byłby drogą do tego. Istnieje interfejs GUI dla launchd o nazwie Lingon, który możesz chcieć sprawdzić, w przeciwieństwie do ręcznej edycji plików launchd:
źródło
MAC OS ma narzędzie Automator Tool, które jest takie samo jak Harmonogram zadań w systemie Windows. Korzystając z Automatora, możesz zaplanować codzienne zadania i połączyć zadanie z cyklicznym wydarzeniem w kalendarzu, aby codziennie uruchamiać skrypty o określonej godzinie. odnośnik do codziennego uruchamiania skryptów w systemie Mac OS
źródło
W przypadku skryptów Apple konfiguruję specjalny kalendarz iCal i używam alarmów do ich okresowego uruchamiania. W przypadku narzędzi wiersza poleceń używam launchd.
źródło
FYI: chociaż tęsknię za jego prostotą, cron to przeszłość na OS X. To był strażnik pantery. Od czasu premiery Tiger. Więc jeśli używasz Leoparda, cron nie wchodzi w grę.
źródło
Możesz użyć crona do planowania zadań.
Zadanie jest określone w następującym formacie.
* * * * * command to execute │ │ │ │ │ │ │ │ │ └─── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0) │ │ │ └──────── month (1 - 12) │ │ └───────────── day of month (1 - 31) │ └────────────────── hour (0 - 23) └─────────────────────── min (0 - 59)
Przykład:
0 12 * * * cd ~/backupfolder && ./backup.sh
Po zainstalowaniu zadań crona możesz użyć crontab -l, aby wyświetlić listę zadań.
Jeśli chcesz dowiedzieć się więcej o wyrażeniach harmonogramu crona, możesz uzyskać do nich dostęp
https://crontab.guru https://ole.michelsen.dk/blog/schedule-jobs-with-crontab-on-mac-osx.html
źródło