Zawsze byłem crontabem. Niedawno zdecydowałem się przełączyć na procesy uruchomieniowe Apple'a i nie mogę uruchomić mojej pierwszej wersji.
The
plutil -lint
polecenie mówi mi, że plist jest poprawnie sformatowany. W rzeczywistości wyświetla „OK”.Uruchomiłem skrypt bash ręcznie i potwierdziłem, że działa poprawnie po ręcznym zainicjowaniu.
Załadowałem plik używając loadctl load i otrzymałem odpowiedź „już załadowany” przy wielokrotnych próbach zrobienia tego samego.
Problem musi być w mojej definicji PLIST. Pomóż mi zauważyć błąd.
Spodziewam się, że będzie działać z następującymi warunkami:
- Tylko gdy użytkownik
jaredclemence
korzysta z systemu - Raz natychmiast po zalogowaniu
- Co 15 minut później
- Zmień katalog na
/Library/WebServer/Documents/medface/
przed uruchomieniem skryptu.
Plik plist wygląda następująco:
<?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>org.pediatricheartcenter.medface.crons</string>
<key>User</key>
<string>jaredclemence</string>
<key>ProgramArguments</key>
<array>
<string>/User/jaredclemence/runMedfaceSchedTasks.batch</string>
</array>
<key>WorkingDirectory</key>
<string>/Library/WebServer/Documents/medface</string>
<key>StartInterval</key>
<integer>900</integer>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Uwagi:
- Zapisałem plik w
~/Library/LaunchAgents/org.pediatricheartcenter.medface.crons.plist
- Poprzednia wersja użytego pliku
Program
zamiastProgramArguments
z<string>
wartość zamiast tablicy.
<key>StandardOutPath</key>
i<key>StandardErrorPath</key>
- Proponuję~/Library/Logs/org.pediatricheartcenter.medface.crons.stdout
(i...stderr
) ponieważ jest to zwykła lokalizacja logowania dla agentów startowych, ale używaj tego, co działa dla ciebie. Dodajecho
lubprintf
s na początku i na końcurunMedfaceSchedTasks.batch
i zobacz, co logi mówią po tobielaunchctl load
Twójplist
.Odpowiedzi:
Launchd zapisuje błędy w systemie.log. Używając konsoli, przeglądałem dziennik. Tam launchd powiedział mi, że nie podoba mi się mój
User
kluczowa wartość. Usunąłem parę klucz-wartość User-jaredclemence i ponownie załadowałem plist. Następnie powiedział mi, że program wsadowy nie istnieje, a następnie zauważyłem błąd w ścieżce pliku./User
powinno być/Users
Usuwając ustawienie User i poprawiając ścieżkę do pliku, udało mi się rozwiązać problem. Teraz działa
ps -ef | grep 'runMed'
, Widzę, że plik wsadowy jest aktualnie wykonywany.POWODZENIE!
źródło