Jak ustawić zadanie, które będzie uruchamiane co jakiś czas?

Jak mam uruchamiać skrypt co, powiedzmy 30 minut? Zakładam, że są różne sposoby na różne OSs. Używam OS X.

Author: gsamaras, 2008-09-25

7 answers

Wystarczy użyć 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 się bez niego). Dla tych, którzy nie są zaznajomieni z launchd (lub ogólnie z OS X), jest to jak krzyżówka między init, cron, at, SysVinit (init.d), inetd, upstart i systemd. Zapożyczanie koncepcji wszystkich tych projektów, ale także oferowanie rzeczy, których nie znajdziesz gdzie indziej.

Każda usługa / zadanie jest plikiem. Lokalizacja pliku zależy od pytań: "kiedy ta usługa ma działać?"i" jakich przywilejów będzie potrzebował serwis?"

Zadania systemowe przejdź do

/Library/LaunchDaemons/

Jeśli będą działać, bez względu na to, czy jakikolwiek użytkownik jest zalogowany do systemu, czy nie. Zostaną one uruchomione z uprawnieniami "root".

Jeśli będą działać tylko wtedy, gdy jakikolwiek użytkownik jest zalogowany, przechodzą do

/Library/LaunchAgents/

I będzie wykonywane z uprawnieniami użytkownika, który właśnie zalogował do środka.

Jeśli będą działać tylko wtedy, gdy ty jesteś zalogowany, przejdź do

~/Library/LaunchAgents/

Gdzie ~ jest Twoim katalogiem domowym. Zadania te będą uruchamiane z Twoimi uprawnieniami, tak jak gdybyś sam je uruchomił za pomocą wiersza poleceń lub dwukrotnego kliknięcia pliku w Finderze.

Zauważ, że istnieje również /System/Library/LaunchDaemons i /System/Library/LaunchAgents, ale jak zwykle wszystko pod {[16] } jest zarządzane przez OS X. Nie umieszczaj tam żadnych plików, nie zmieniaj tam żadnych plików, chyba że naprawdę wiesz co robisz to. Bałagan w folderze Systems może sprawić, że system będzie bezużyteczny(doprowadzić go do stanu, w którym nawet odmówi ponownego uruchomienia). Są to katalogi, w których Apple umieszcza zadania launchd, które uruchamiają system podczas rozruchu, automatycznie uruchamiają usługi zgodnie z wymaganiami, wykonują zadania konserwacji systemu i tak dalej.

Każde zadanie launchd zawiera plik w formacie plist. Powinien mieć odwrotną notację nazwy domeny. Np. możesz nazwać swój zadanie

com.example.my-fancy-task.plist

Ten plist może mieć różne opcje i ustawienia. Pisanie jednego na rękę jest nieoptymalne, możesz chcieć uzyskać darmowe narzędzie Lingon do tworzenia zadań. To narzędzie było bezpłatne, teraz kosztuje $5 w app store i $10 jako wersja non app store (wersja non app store jest znacznie potężniejsza, a jeśli już planujesz za nią zapłacić, poważnie, Pobierz wersję non app store). Jeśli ktoś zna porównywalne narzędzie, które jest freeware lub open source, napisz do mnie w komentarzach i raczej polecam ten (nie chcę tu reklamować komercyjnego oprogramowania).

Jako przykład może 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 uruchomi skrypt powłoki /usr/local/bin/my-script.sh co 1800 sekund (co 30 minut). Możesz również uruchomić zadanie w określonych datach/godzinach (w zasadzie launchd może zrobić wszystko, co cron może zrobić) lub możesz nawet wyłączyć "OnDemand", co spowoduje, że launchd utrzyma proces na stałe (jeśli zakończy działanie lub awaria, launchd natychmiast uruchomi go ponownie). Można nawet ograniczyć ilość zasobów proces może używać (jak wspomniano wcześniej, Lingon pokazuje wszystkie te ustawienia w ładny interfejs UI).

Aktualizacja: mimo że OnDemand jest nadal wspierany, jest przestarzały. Nowe ustawienie nosi nazwę KeepAlive, co ma o wiele większy sens. Może mieć wartość logiczną, w którym to przypadku jest dokładnym przeciwieństwem OnDemand (ustawienie jej na false zachowuje się tak, jakby OnDemand było true i odwrotnie). Na świetną nową cechą jest to, że może również mieć wartość słownika zamiast wartości logicznej. Jeśli ma wartość słownikową, masz kilka dodatkowych opcji, które dają więcej kontroli drobnego ziarna, w jakich okolicznościach zadanie powinno być utrzymywane przy życiu. Np. jest utrzymywany przy życiu tak długo, jak program zakończy działanie z kodem wyjścia równym zero, tylko tak długo, jak istnieje określony plik/katalog na dysku, tylko wtedy, gdy inne zadanie jest również żywe, lub tylko wtedy, gdy sieć jest obecnie uruchomiona.

Także Ty można ręcznie włączać / wyłączać zadania za pomocą wiersza poleceń:

launchctl <command> <parameter>

Polecenie może być załadowane lub rozładowane, aby załadować plist lub rozładować go ponownie, w którym to przypadku parametr jest ścieżką do pliku. Lub polecenie może być start lub stop, aby po prostu uruchomić lub zatrzymać takie zadanie, w którym to przypadku parametrem jest etykieta (com. example. my-fancy-task). inne polecenia i opcje istnieją również.

Zobacz dokumentację Apple o formacie plist oraz o launchctl narzędzie wiersza poleceń (zauważ, że można wybrać wersję OS X na górze, ponieważ format / opcje różnią się między różnymi wydaniami OS X) {]}

 103
Author: Mecki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-14 20:22:09

Przydałby się bardzo wygodny generator plist: http://launched.zerowidth.com/ (nie trzeba nic kupować...)

To da ci shell one-liner do zarejestrowania nowego zaplanowanego zadania z już zalecanym launchd

 28
Author: Kosmotaur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-25 11:50:39

Na MacOSX masz co najmniej następujące opcje:

Z własnego doświadczenia wynika, że cron jest najbardziej wiarygodny. Kiedy testowałem, launchd miał wiele błędów i dziwactw. alarmy iCal uruchamiane są tylko wtedy ,gdy jesteś zalogowany (ale może to być coś, co wolisz).

 11
Author: Bruno De Fraine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 12:30:48

Jak zauważył Mecki, launchd byłby dobrym rozwiązaniem. Istnieje interfejs GUI dla launchd o nazwie Lingon , który możesz sprawdzić, w przeciwieństwie do ręcznej edycji plików launchd:

Lingon jest graficznym interfejsem użytkownika do tworzenia edycji launchd pliki konfiguracyjne dla Mac OS X Leopard 10.5.

[snip...]

Edycja pliku konfiguracyjnego jest łatwiejsza niż kiedykolwiek w tej wersji i ma dwa różne tryby. Podstawowe Tryb, który ma najczęściej ustawienia łatwo dostępne w bardzo prostym interfejsie i trybie eksperckim gdzie można dodać wszystkie ustawienia bezpośrednio w tekście lub wstawić je przez menu.

 5
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-02 15:28:51

Mac ma narzędzie Automator, które jest takie samo jak w Harmonogramie zadań w systemie windows. Ale za pomocą Automatora można zaplanować zadanie na co dzień i połączyć zadanie z cyklicznym wydarzeniem kalendarza, aby codziennie uruchamiać skrypty w określonym czasie. odsyłacz aby uruchamiać skrypty na co dzień w systemie Mac OS

 3
Author: Jlearner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-19 04:20:11

Dla skryptów apple, skonfigurowałem specjalny kalendarz iCal i używam alarmów do ich cyklicznego uruchamiania. W przypadku narzędzi wiersza poleceń używam launchd.

 2
Author: Mike Heinz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 14:31:47

FYI: o ile mi brakuje, to cron to już przeszłość na OS X. był watchdog na pantherze. Od czasów Tigera został on uruchomiony. Więc jeśli używasz Leoparda cron nie jest opcją.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-12 20:39:46