Jak mogę uruchomić skrypt do codziennego uruchamiania w systemie Mac OS X?

Odpowiedzi:

62

Dla porównania wszystkie 3 opcje będą działać. Opcja iCal ma jednak więcej ograniczeń niż inne.

(Istnieją GUI do edycji crona i uruchomienia, jak wspomniano w innych odpowiedziach)

Cron jest najbardziej prosty i znany, a dostępnych jest wiele samouczków. Coles Notes polega na dodaniu ostatniego wiersza od dołu do twojej tabeli (poprzez edycję /etc/crontablub użycie crontabw wierszu poleceń):

MM HH DD MM WKD -- Minutes, Hour, Day, Month, Weekday (eg. Sun, Mon)
MM HH * * * USERNAME /PATH/TO/SCRIPT
00 3 * * * chealion /myscript.sh "Runs at 03:00 every day"

W Mac OS X cronzostał faktycznie zastąpiony przez, launchdale launchdjest wstecznie kompatybilny, cronco oznacza, że ​​nadal możesz go używać, cronale w rzeczywistości launchdwykonuje całą pracę.

Jeśli chcesz użyć launchd, sprawdź także inne pytania tutaj na Super User: (np. Jak uruchomić uruchomioną komendę jako root? ), Gdzie chcesz zapisać plik konfiguracyjny (plik plist) jak działa, zależy od tego, w którym katalogu jest przechowywany i jak jest ładowany (np. czy użyłeś sudo czy nie) - podobnie jak cron.

Następujący przykładowy codzienny uruchamiany plist (upewnij się, że plik i etykieta są takie same - pomniejszone o plist dla etykiety) - ten skrypt jest uruchamiany codziennie o 3 minuty po północy:

<?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>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <false/>
    <key>UserName</key>
    <string>USERNAME HERE</string>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>ProgramArguments</key>
    <array>
        <string>Argument_1</string>
        <string>Argument_2</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>00</integer>
        <key>Minute</key>
        <integer>03</integer>
    </dict>
</dict>
</plist>

Warto również zauważyć, że uruchomione zadania, jeśli zostały zaplanowane na czas, gdy komputer śpi lub jest wyłączony, będą działać, gdy komputer stanie się ponownie dostępny (włączając go lub budząc) - choć tylko raz, bez względu na to, ile dni może mieć być. Edycja: Właśnie byłem przy dokumencie Apple, który powiedział, że jeśli maszyna jest wyłączona, wtedy stracisz wszystkie zdarzenia uruchamiania w tym czasie (twój skrypt nie uruchomi się przy uruchomieniu), (sen uruchomi skrypt po przebudzeniu)


Inną opcją jest użycie „ at ” (sprawdź stronę podręcznika z „man at”). Skrypt może się ponownie zaplanować za pomocą np .:

echo "sh $0 $@" | at `date +%H:%M` tomorrow

(użyj „+ 10 minut” zamiast „jutro”, aby uruchomić go co 10 minut; aby zatrzymać planowanie, po prostu wykonaj „at -l”, aby wyświetlić listę zaplanowanych identyfikatorów zadań, a następnie „at -r id ”, aby usunąć zadanie)

Może być konieczne uruchomienie odpowiedniego demona (atrun) najpierw za pomocą (patrz https://superuser.com/a/43680 ):

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Zalety: szybka poprawka, brak dostępu do sudo / root, łatwe do wykonania skomplikowane wzorce harmonogramu Wada: niestandardowa metoda planowania dla OS X (która jest uruchamiana)

Chealion
źródło
8
Sir, na przykład uruchomiłem plik konfiguracyjny, mógłbym cię pocałować . Ale nie będę.
Paul D. Waite,
5
launchdjest drogą do przejścia pod OS X.
zneak
Tak, to było moje wrażenie. Wygląda na to, że miał pewne problemy w Tygrysie, ale Apple wydaje się wyostrzać od tego czasu.
Paul D. Waite,
W systemie Os 10.7.4 nie ma pliku / etc / crontab. ): Więc zrobiłem „który crontab” i to dało mi / usr / bin / crontab, ale to jest zniekształcony plik.
Hermann Ingjaldsson
@HermannIngjaldsson / usr / bin / crontab to program; jeśli uruchomisz go w Terminalu crontab -e, przeniesie Cię on do edytora tekstowego opartego na terminalu w pliku, który stanie się Twoim osobistym crontabem podczas jego zapisywania.
Mark Reed,
8

LaunchControl to kolejny GUI dla launchd / launchctl. Podczas gdy alternatywy wspomniane przez innych są w pełni zdolne do uruchamiania skryptu na codzień, z LaunchControl możesz konfigurować złożone harmonogramy (np. „Raz w każdy dzień roboczy, w weekendy co godzinę między 14:00 a 20:00”). Jest to także (AFAIK) jedyne narzędzie, które faktycznie sprawdza poprawność zadania. Jeśli praca nie działa zgodnie z oczekiwaniami, pokaże ci dlaczego.

Wypróbuj za darmo tak długo, jak chcesz.

Mark Hall
źródło
3
Chociaż wypróbowanie / użycie jest bezpłatne, programista woli zapłacić za licencję. sites.fastspring.com/somazone/product/shop
Kent
1
Absolutnie. Powodem, dla którego opublikowałem tę odpowiedź, było przede wszystkim wsparcie programisty.
Mark Hall
5

CronniX to przyjemna nakładka GUI do planowania zadań crona na komputerze Mac ... Całkiem przyzwoita, jeśli nie chcesz zagłębiać się w dokumentację crona.

Zoran
źródło
2
  • W przypadku programu iCal możesz przeczytać ten artykuł .
  • Powinieneś znaleźć wystarczająco dużo samouczków, cronjeśli google na to.

Zależy to od tego, czego chcesz: skrypty iCal będą wykonywane tylko wtedy, gdy jesteś zalogowany, cronwykonuje skrypt bez zalogowania. Nie wiem, czy iCal wykonuje skrypt, jeśli komputer Mac został wyłączony w momencie, gdy skrypt powinien był mieć został stracony. cronrobi to.

Felix
źródło
2

Aktualizacja: możesz sprawdzić niektóre aplikacje w Mac OS X App Store, które to robią:

Lingon również wydaje się być dostępny, w zależności od używanego systemu operacyjnego.

Steve Cooley
źródło
2

Oto proste, bezpłatne narzędzie do generowania plist XML:

http://www.gieson.com/Library/projects/utilities/launcha/

Przy takim użyciu nie ma potrzeby instalowania programu, wystarczy zapisać wyniki w folderze Library / LaunchAgents.

kok
źródło
Ostrzeżenie: jeśli korzystasz z tego narzędzia, upewnij się, że RunAtStartjest ono ustawione na false (chyba że chcesz, aby było prawdziwe). Spędziłem godzinę zastanawiając się, dlaczego mój Finder zawiesił się i powstrzymał ładowanie pulpitu podczas uruchamiania. Wyłączenie RunAtStartnie zakłóca ustalonego harmonogramu.
Andrea Lazzarotto
1

Zawsze używam do tego Lingona , ale wygląda na to, że nie jest już w fazie rozwoju. Możesz spróbować Crontooie , ale nigdy nie użyłem go osobiście. Lub po prostu edytuj plik crontab w terminalu.

Josh
źródło
Wydaje mi się, że Lingon jest aktywnie rozwijany ; obecna wersja 3 jest dostępna w AppStore wraz z poprzednią wersją 2. Oba kosztują kilka dolarów i otrzymują bardzo zróżnicowane recenzje. Osobiście używam Lingona 3 z pewnym powodzeniem, ale nie poleciłbym go do tego celu w porównaniu z innymi narzędziami wymienionymi w innych odpowiedziach (cron, at itp.).
ssc
Ostatni raz użyłem Lingona ponad 2 lata temu. W tym czasie działało to dla mnie dobrze, ale nie korzystałem z ostatnich wersji. Szkoda, że ​​nie jest tak niezawodny, jak kiedyś.
Josh
0
sp@mactop ~ $ crontab -l
*/5 * * * * /usr/local/bin/cinco.sh
sp@mactop ~ $ cat /usr/local/bin/cinco.sh
#!/bin/sh
....cut....
sp@mactop ~ $ 

... jakiekolwiek wiersze poleceń, które wprowadzisz dla „.... cut ....” będą uruchamiane co pięć minut.

30 lat postępu, a „cron” nadal jest moim ulubionym programistą.

-DO

CJ Steele
źródło
0

Jeśli wydarzenie kalendarza spełnia Twoje potrzeby, wbudowana aplikacja Automator umożliwia także tworzenie alarmów kalendarza, które są uruchamiane przez zdarzenia kalendarza. Możesz użyć niektórych wbudowanych akcji opartych na interfejsie użytkownika, aby zrobić to, co chcesz, lub możesz też uruchomić aplikację lub niestandardowy skrypt AppleScript, JavaScript lub skrypt powłoki.

Brett Zamir
źródło