Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Obsługa launchd


  • Zaloguj się, aby dodać odpowiedź
3 odpowiedzi w tym temacie

#1 sk4

sk4
  • 232 postów

Napisano 20 lutego 2018 - 18:08

Hej,
 
stworzyłem sobie taki skrypt, który chciałem odpalać raz w tygodniu w celu usunięcia zapisanych załączników z Mail.app:
 
https://github.com/b...downloads.plist
 
Nie pisałem wcześniej rzeczy pod launchd i trochę nie rozumiem chyba.
Załadowałem skrypt:

launchctl load ~/Library/LaunchAgents/com.bartskowron.apple.maildownloads.plist

 
Skypt jest załadowany (widzę to w launchctl list jak i w Console.app gdzie niby jest ustawiony na start na niedzielę@21).
 
Próbowałem wymusić jego uruchomienie poprzez:

launchctl start com.bartskowron.apple.maildownloads

Ale nic się nie stało :(
Zmieniłem w skrypcie StartCalendarInterval na RunAtLoad na próbę, ale też nie widzę aby katalogi się usunęły. Nie widzę też żadnego błędu w outputcie, ani w Console.

 

Aha, po dodaniu:

<key>StandardOutPath</key>
<string>/Users/xsx/clean.out</string>
<key>StandardErrorPath</key>
<string>/Users/xsx/clean.err</string>
Pliki się tworzą, ale są puste :(

 

Jakaś podpowiedź? :)



#2 imrik

imrik
  • 3 450 postów
  • SkądWrocław, Poland

Napisano 20 lutego 2018 - 19:13

Też w tym nie grzebie za dużo, ale ja na Twoim miejscu agentem odpalałbym skypt bash który robi to co ma robić. Nie jestem pewien czy to dobry pomysł bezpośrednio w agencie rm -rf na folderze wywoływać. Proponuję wysłużyć się crontabem - chyba bardziej odpowiada Twoim potrzebom niż agent. Zaznaczę jedno, że nie mam pojęcia jak to obecnie wygląda na macOS bo ostatni raz miałem z własnymi skryptami crona do czynienia jeszcze na kotach. Strzelam, że nic się nie zmieniło i crontab ma się dobrze.

 

Poza tym nie podoba mi się ta nazwa, ale to nie powinno mieć znaczenia

com.bartskowron.apple.maildownloads.plist

Zgodnie "ze sztuką" powinno być raczej:

com.bartskowron.applemaildownloads.plist

i oczywiście sam agent powinien być umieszczony pod nazwą odpowiednią.

 

Kolejna rzecz która mi się rzuca to sama ścieżka

$HOME/Library/Containers/com.apple.mail/Data/Library/Mail Downloads/*

Chyba brakuje znaku ucieczki przed spacją w Mail Downloads więc możliwe że powinno być

$HOME/Library/Containers/com.apple.mail/Data/Library/Mail\ Downloads/*

Albo chociaż jakiś cudzysłów czy coś.

 

Kolejna rzecz to - czy musi być tak home ustawiany? Nie prościej po prostu ~/Library albo /Users/.../Library ? Ufam, że zgłębiłeś temat ale tak na wszelki wypadek podrzucam. 


Użytkownik imrik edytował ten post 20 lutego 2018 - 19:15


#3 sk4

sk4
  • 232 postów

Napisano 21 lutego 2018 - 02:09

OK. Odpowiadam sam sobie :D

 

No więc nic z tych rzeczy, to wszystko było legit. Problem pojawił się z powodu globbingu (* - w ścieżce). Nie jest to wspierane przez launchd. Okazało się, że była wcześniej flaga EnableGlobbing, ale teraz jak się ją dodaje to jest oznaczona jako deprecated i jest ignorowana. Zmieniłem zatem globbing w wykorzystanie find i poszło. Tzn. testy i logi na to wskazują, zobaczymy w niedzielę :D

Aktualne rozwiązanie pod linkiem z pierwszego posta jak coś :)



#4 sk4

sk4
  • 232 postów

Napisano 21 lutego 2018 - 12:15

A jeszcze trochę dopieściłem temat, to zostawiam dla potomnych :-)

 

Chciałem dodać, aby skrypt sprawdzał czy Mail.app jest uruchomiony i wykonywał się tylko w przypadku kiedy nie jest. Niestety nie było to łatwe z poziomu launchd ze względu na brak wsparcia dla  pipeline'ów. Ostatecznie uruchamiam /bin/sh i w nim robie weryfikację i uruchomienie sprzątaczki w przypadku spełnienia warunku.

To zmusiło mnie do escape'owania spacji w ścieżce "Mail Downloads", ale to nie dziwne bo to fragment parsowany już przez shell.

 

Cała poprawiona wersje siedzi na GitHubie. Oby w niedzielę zadziałało :D






Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych