Установка переменных среды для скриптов, запускаемых launchd?

1

У меня есть сценарий, который работал в прошлом, но, похоже, сейчас возникают проблемы (я думаю, это из-за Йосемити). Я создал переменную окружения, для которой было установлено значение «false», а затем мой сценарий установил для нее значение «true», чтобы, если сценарий занимал слишком много времени и запускался снова до его завершения, он не пытался запускаться снова одновременно. Тем не менее, это больше не работает.

Я установил переменную изначально с помощью /etc/launchd.conf

setenv autoBackupImagesInProgress false

И часть моего сценария, которая больше не работает,

#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

Это работает, если я запускаю скрипт из терминала или Spotlight, но не тогда, когда это запускается с launchd. При запуске из launchd это всегда будет печатать первое предупреждение и никогда не попадет в elif.

tenmiles
источник
Не уверен, что останавливает сценарий. Но это может помочь, если вы упростите его, просто сделав одну проверку в блоке if и сделав его еще одним. Итак, если .. = true, тогда выведите предупреждение: Warning: Already ... else .. Print: Concurr .. fi
markhunte
@markhunte это не останавливается полностью, просто первое условие всегда истинно, поэтому оно печатает предупреждение, никогда не достигает другого, а затем переходит к остальной части сценария (здесь для простоты опущено).
десять минут

Ответы:

1

Откройте редактор сценариев (Панель запуска -> Другое -> Редактор сценариев). Введите сценарии следующим образом:

do shell script "launchctl setenv autoBackupImagesInProgress false"

Используйте несколько строк, если вы хотите установить несколько переменных.

Сохраните этот сценарий как Приложение, откройте SystemPreferences → Пользователи и группы → Ваш пользователь → Элементы входа и добавьте сохраненный сценарий.

Чтобы применить изменения, выйдите из своей учетной записи и войдите снова.

jherran
источник
1
Это не работает Работает нормально, если я запускаю скрипт вручную (как это происходит с файлом /etc/launchd.conf), но при запуске из launchd (скрипт запускается каждые 5 минут) он не работает.
Десятки