Skrypt Cron nie działa na Mavericks

12

Skonfigurowałem plik crontab użytkownika w następujący sposób:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh

Ale się nie wykona. Czekałem około 10-15 minut. Dlaczego?

Polecenie auto-update.sh działa łatwo, jeśli jest wykonywane ręcznie. Jak mogę rozdzielić łańcuch wykonawczy i uruchomić mój skrypt z crona?

RomaValcer
źródło
1
Z jakiego systemu operacyjnego korzystasz? Cron jest przestarzały w OS X, więc może być konieczne uruchomienie demona?
bmike
Najnowsze, 10.9.2. Jak mam to zrobić? Chcę na przykład, aby skrypt działał co godzinę. W powyższym skrypcie byłem zdesperowany, ponieważ nie działał, i modyfikowałem go tak, aby działał co 2 minuty.
RomaValcer
1
Demon cron powinien zostać automatycznie uruchomiony (przez jego zastąpienie, uruchomienie), jeśli istnieje plik crontab. Zobacz /System/Biblioteka/LaunchDaemons/com.vix.cron.plist (zwłaszcza elementy KeepAlivei QueueDirectories).
Gordon Davisson
OK, Keeplive jest tam, ale tylko wymieniona ścieżka zawiera „/ etc / crontab”, który nie istnieje. W QueueDirectories istnieje plik w ograniczonym folderze „/ usr / lib / cron / tabs”. Otwierając go za pomocą su i vim, jest moje zadanie.
RomaValcer

Odpowiedzi:

17

Środowisko, w którym działa zadanie cron, jest nieco inne niż interaktywna powłoka; prawdopodobnie skrypt działa, ale nie powiedzie się. Jedną z największych różnic jest to, że dla zadań cron domyślna ŚCIEŻKA to po prostu „/ usr / bin: / bin”, więc jeśli użyjesz poleceń, których nie ma w / usr / bin lub / bin, nie będą one znalezione, chyba że skrypt albo ustawi własną PATH, albo nie podaje wyraźnych ścieżek do poleceń. Inną dużą różnicą jest to, że nie jest ona połączona z sesją interaktywną, więc jeśli spróbuje zrobić coś interaktywnego (odczyt z terminala itp.), To się nie powiedzie. Spróbuj zmienić wpis cron na:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh >>/tmp/auto-update.log 2>&1

... i sprawdź, czy w dzienniku pojawi się coś informacyjnego.

Gordon Davisson
źródło
To jest lepsze niż mój wysiłek - nie wahaj się włączyć mojego loggera, jeśli poprawi to twoją odpowiedź.
bmike
Dziennik po prostu się nie pojawił.
RomaValcer
@RomaValcer: to dziwne - oznacza to, że nie jest nawet tak daleko, jak uruchomienie skryptu. Uruchomiłbym ps -ax | grep [c]roni sprawdziłbym, czy wyświetla listę uruchomionych demonów cron (/ usr / sbin / cron). Jeśli tak, wypróbuj test rejestratora bmike. W każdym razie sprawdź dzienniki (/var/log/system.log i element „Wszystkie wiadomości” w narzędziu konsoli) i sprawdź, czy jest coś istotnego.
Gordon Davisson,
Tak, jest tam. Ale dzienniki nie pokazują niczego, co zaczyna się w zaplanowanym czasie.
RomaValcer
4

Trudno powiedzieć, ale co, jeśli dodasz drugie zadanie crona do wykonywania co około 5 minut i wywoła ono jakieś narzędzie zbudowane w systemie, które rejestruje wiadomości do system.log?

0,5,10,15,20 * * * * /usr/bin/logger "cron is working"

W ten sposób będziesz wiedział, że cron działa dla danego użytkownika i może skupić się na uruchomieniu crona lub naprawieniu skryptu, aby działał w środowisku ograniczonego crona. (Możesz spojrzeć na zegar ścienny i wybrać kilka razy, które wkrótce się pojawią, a nawet kilka następnych minut - np. Edycja o 12:34 wstaw 35, 36, 37, 38 dla minut, aby uruchomić i zapisać plik cron .)

bmike
źródło
4

Od dawna zadajesz to pytanie, ale wydaje się, że w tym wątku nie znalazło się żadne rozwiązanie.

W zależności od sposobu tworzenia crontab użytkownika może być konieczne wykonanie tego po edycji:

crontab ~/.yourcrontabfile

Aby sprawdzić, czy nowy crontab (również po jego modyfikacji) został aktywowany, sprawdź za pomocą:

crontab -l
Ben
źródło
To nie działa. Crontab -l pokazuje, że crony są skonfigurowane, ale nadal nie działa.
PKHunter
1

Miałem ten sam problem. Musisz dodać ścieżkę do skryptu bash:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin
Ivan Zhirkov
źródło
0

Miałem ten sam problem. Zniknęło po dodaniu nowego wiersza po mojej pracy w pliku crontab (jestem w sumie crontab n00b, więc nie mam pojęcia, czy takie zachowanie jest powszechnie znane, czy nie).

RMD
źródło