Skrypt Crontab w systemie Mac OS X Lion już nie działa

2

Mam problem z zadaniami crona. Poprzednio ten skrypt działał dobrze na serwerze Mac OS X 10.6, ale po zainicjowaniu go na Lion (klient) skrypt przestał działać.

Zasadniczo to .bat plik wywołuje a jar plik (który wywołuje pętlę mysqldump polecenia) do tworzenia kopii zapasowych kilku baz danych na kilku serwerach i działa doskonale, jeśli jest uruchamiany przez powłokę.

cd /Users/nameoftheuser/Desktop/backupper 
/usr/bin/java -cp .:Backupper.jar:lib/mail.jar backupper.Main "/Users/nameoftheuser/Desktop/backupper/listasiti.txt" "/Users/nameofthe/Desktop/backupper/config.properties

Ale jeśli cron uruchomi to samo .bat plik, wygenerowane kopie zapasowe bazy danych to 0 bajtów.

Wpis crona to:

0     0     sh /Users/path/to/file.bat

Uważam, że problem polega na tym, że cron nie działa jak root. Albo co jeszcze?

Nopster
źródło
Więc co w twój skrypt, proszę? Nie możemy magicznie odgadnąć, co działa, a co nie. Jeśli chcesz go uruchomić root crontab, zobacz: superuser.com/questions/344398/… - także: jak początkowo edytujesz crontab? Czy wywołujesz skrypt za pomocą powłoki sh … zbyt?
slhck
Wpis nietoperza to: cd /Users/nameoftheuser/Desktop/backupper /usr/bin/java -cp .:Backupper.jar:lib/mail.jar backupper.Main "/Users/nameoftheuser/Desktop/backupper/listasiti.txt" "/Users/nameofthe/Desktop/backupper/config.properties" - Edytowałem crontab za pomocą nano, zalogowanego w terminalu z tym samym użytkownikiem, w którym przechowywany jest skrypt, używając kart zamiast spacji. Skrypt uruchamiany przez powłokę jest bez sh, ale nawet jeśli napisałem to w cronie, nie działa. Zapomniałem powiedzieć, że zainstalowałem środowisko Java, ponieważ w Lionie nie ma zainstalowanego systemu operacyjnego.
Nopster
Czy możesz sprawdzić, czy sam cron działa? Czy edytowałeś to crontab -e?
slhck
Oczywiście, przetestowałem go i działa, wyniki crontab -e wyświetlają właściwy wpis. Plik bat jest przetwarzany we właściwym czasie, ale kopie zapasowe mają 0 bajtów.
Nopster
To prowadzi mnie do przekonania, że ​​istnieje problem z samą aplikacją do tworzenia kopii zapasowych. Co to jest? Backupper.jar? Powinieneś go prawdopodobnie zdebugować i zobaczyć, dlaczego pliki mają tylko 0 bajtów.
slhck

Odpowiedzi:

1

Zrobiłbym to w systemie OS X i użyłbym launchd zamiast crona. Robisz to, pisząc LaunchAgent. Jest to w zasadzie plik .plist w katalogu / Library / LaunchAgents lub ~ / Library / LaunchAgents, który informuje launchd o tym, jaki skrypt ma zostać uruchomiony i jaki powinien być mechanizm uruchamiania skryptu.

launchd pozwala kontrolować, czy skrypt powinien być uruchamiany przez zalogowanego użytkownika czy użytkownika root.

Lingon.app to dobry sposób na rozpoczęcie pracy z LaunchAgents i zarządzanie nim.

Strona podręcznika Apple Developer Connection może również pomóc.

Daniel Schlaug
źródło