Mam uruchomionego demona, ~/Library/LaunchAgents
który działał dobrze w Mavericks. Ale nie rozpocznie się w publicznej wersji beta Yosemite. Plist demona jest taki (moja nazwa użytkownika to darksair
UID 501)
<?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.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>KeepAlive</key>
<false/>
<key>StartInterval</key>
<integer>300</integer>
<key>LaunchOnlyOnce</key>
<false/>
<key>UserName</key>
<string>darksair</string>
<key>ProcessType</key>
<string>Standard</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Zasadniczo ma on działać ~/bin/retrmail.py
co 5 minut.
Zauważam, że w Yosemite uruchomiono aktualizację do 2.0, a launchctl ma nowe polecenia. próbowałem
sudo launchctl kickstart user/501/org.darksair.retrmail
i powiedział
Could not find service "org.darksair.retrmail" in domain for uid: 501
Próbowałem też starej szkoły
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
i powiedział
/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions
Plik jest własnością mnie i grupy pracowników. Próbowałem z uprawnieniami 644 i 600 z tym samym błędem.
Czy ktoś wie, jak prawidłowo odpalić uruchomionego demona w Yosemite?
AKTUALIZACJA: Wygląda na to, że mój plik agenta uruchamiania musi być własnością root:wheel
. Po chown spróbowałem
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
i nie spowodowało to żadnego błędu. I myślę, że mój diamon działa poprawnie. Pozostawię to pytanie otwarte, ponieważ pamiętam, że uruchomiony dokument jasno stwierdza, że plik agenta uruchamiania może być własnością użytkownika uruchamiającego demona.
UPDATE2: Nie, to nie działało poprawnie. Uruchomiono go tylko raz, ale nie ponownie, tak jakby został rozładowany.
AKTUALIZACJA 3: Uaktualniłem do publicznej wersji beta 3 Yosemite i zmieniłem mojego agenta na to
<?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.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>UserName</key>
<string>darksair</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Ponownie załadowałem tego agenta i myślę, że teraz działa poprawnie. Nadal pozostawiam to pytanie otwarte, ponieważ nie wiem, co jest nie tak z moją poprzednią listą.
Podsumowując, znalazłem, że muszę zmienić właściciela plist root:wheel
, aby go załadować.
źródło
Odpowiedzi:
Z
man launchctl
Fix is
źródło
chmod 644
?O dziwo, używanie
sudo
było twoim problemem. Korzystając z niegosudo
, nie byłeś już sobą, więc nie byłeś właścicielem własnego pliku. Usuńsudo
, powtórz polecenie i powinno się ładować w porządku. Przepraszam za filozoficzne podejście do tego wszystkiego.źródło
Znalazłem rozwiązanie.
Prawidłowe polecenie w tym przypadku to
I rozładować,
Nie wiem jednak, dlaczego
launchctl load
wymaga rootowania, ale ładowanie / rozładowywanie i tak jest przestarzałe.źródło
chmod
&chown
?Wpadłem również na to, próbując użyć użytkownika, a nie roota .plist (jak można to zrobić)
Zostałem ssh-ededowany na tym komputerze zdalnie, kiedy NIE byłem zalogowany na konsoli (bez głowy), co wydawało się być moim problemem - przynajmniej usługi zarządzane przez użytkownika wymagają zalogowania się użytkownika na ekranie głównym (skończyłem logowanie przez zdalne zarządzanie, ponieważ jest to maszyna bezgłowa)
IMO, jeśli chcesz, aby to działało, nawet jeśli nie jesteś tam osobiście, aby zalogować się, możesz:
Ustaw automatyczne logowanie konta (zwróć uwagę na konsekwencje dla bezpieczeństwa, również bez znacznika UserName, jak podano w jednej z odpowiedzi)
Spraw, aby pliki były własnością roota, jak zaznaczono w różnych sugestiach (przywracanie użytkownika do twojego z UserName, jak już masz)
źródło
Oto głupi pomysł.
Właśnie miałem ten sam błąd, także po aktualizacji do Yosemite. Przez pomyłkę założyłem, że oznacza to złe własności / uprawnienia do pliku .plist, gdy w rzeczywistości z jakiegoś powodu plik binarny, do którego odwoływałem się w liście (w moim przypadku Cassandra), stracił swój plik wykonywalny.
chmod + x'ing to naprawiło.
Prawdopodobnie nie twój problem, ale warto spróbować :)
źródło
Usuń
UserName
klucz i ciąg.Problem polega na tym, że
UserName
klucza można użyć tylko wtedy, gdy proces jest uruchamiany przez root. Można go uruchomić tylko jako root, jeśli plist jest własnością root. Zasadniczo proces jest uruchamiany przez rootowanie, a następnie suid'ed do określonego użytkownika. Jeśli chcesz, aby ten proces działał jak ty, umieść plist w folderze ~ / Library / LaunchAgents i usuń klucz UserName.źródło
Czy próbowałeś ręcznie ponownie załadować agenta, który miał uprawnienia użytkownika? Nie do końca rozumiem, dlaczego to wszystko jest wymagane, ale uważam, że musisz być dołączony do domeny użytkowników (wydaje się, że nie jesteś przywiązany, gdy działasz jako root). Użycie tych funkcji do ponownego podłączenia działało dla mnie.
Użyłbyś tego w następujący sposób:
Bsexec ponownie umieści Cię w domenie i pozwoli Ci dodać zadanie jako program uruchamiający użytkownika.
źródło