Ustawianie zmiennych środowiskowych dla skryptów uruchamianych przez launchd?


1

Mam skrypt, który działał w przeszłości, ale wydaje się, że teraz ma problemy (sądzę, że jest to spowodowane Yosemite). Stworzyłem zmienną środowiskową, która została ustawiona na „false”, a następnie mój skrypt ustawiłby ją na „true”, tak że jeśli skrypt trwał zbyt długo i zaczynał się ponownie przed jego zakończeniem, nie próbowałby ponownie uruchomić się jednocześnie. Jednak to już nie działa.

Ustawiłem zmienną początkowo za pomocą /etc/launchd.conf

setenv autoBackupImagesInProgress false

A część mojego skryptu, która już nie działa, to

#Ensure that this script isn't already running
if [ -z "$autoBackupImagesInProgress" ] ; then
   #Concurrency variable was not setup so this will not work;
   #edit .bashrc or .profile to include export autoBackupImagesInProgress=false
   #should be /etc/launchd.conf
   print "WARNING: Concurrency protection unavailable"
elif [ $autoBackupImagesInProgress = true ] ; then
   #Another process has already started this, but has not yet finished
   print "WARNING: Already in progress; aborting."
   exit 0;
fi

Działa to, gdy skrypt jest inicjowany z terminala lub Spotlight, ale nie wtedy, gdy jest uruchamiany za pomocą launchd. Po uruchomieniu z launchd zawsze wyświetli pierwsze ostrzeżenie i nigdy nie trafi w elif.


Nie jestem pewien, co zatrzymuje skrypt. Ale może to pomóc, jeśli uprościsz go, po prostu sprawdzając blok if i czyniąc go innym. Więc jeśli .. = true, to wydrukuj "Ostrzeżenie: już ... inny .. Drukuj" Ostrzeżenie: współbieżny
markhunte

@markhunte nie zatrzymuje się całkowicie, tylko że pierwszy warunek jest zawsze prawdziwy, więc wypisuje ostrzeżenie, nigdy nie dociera do innego, a następnie wykonuje resztę skryptu (pominiętego tutaj dla uproszczenia).
tenmiles

Odpowiedzi:


1

Otwórz Edytor skryptów (Pad uruchamiania - & gt; Inne - & gt; Edytor skryptów) Wpisz takie skrypty:

do shell script "launchctl setenv autoBackupImagesInProgress false"

Użyj wielu linii, jeśli chcesz ustawić wiele zmiennych.

Zapisz ten skrypt jako Application, otwórz SystemPreferences → Users & amp; Grupy → Twój użytkownik → Elementy logowania i dodaj zapisany skrypt.

Aby zastosować zmiany, wyloguj się z konta i zaloguj ponownie.


1
To nie działa. Działa dobrze, jeśli uruchomię skrypt ręcznie (tak jak w przypadku pliku /etc/launchd.conf), ale po zainicjowaniu z launchd (skrypt jest uruchamiany co 5 minut) nie działa.
tenmiles
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.