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.