Эта работа для меня с использованием последней версии MacOS Mojave
tell application "Preview" to activate
repeat while application "Preview" is not running
delay 0.2
end repeat
tell application "System Events"
try
click menu item "Show Markup Toolbar" of menu 1 of menu bar item "View" of menu bar 1 of application process "Preview"
end try
delay 0.5
try
click menu item "Show Toolbar" of menu 1 of menu bar item "View" of menu bar 1 of application process "Preview"
end try
delay 0.5
repeat while not (exists of toolbar 1 of window 1 of application process "Preview")
delay 0.2
end repeat
set description2 to a reference to every checkbox of toolbar 1 of window 1 of application process "Preview"
set theCheckboxes to description of description2
if item 1 of theCheckboxes is "Draw" then
set checkBoxDraw to 1
else
set checkBoxDraw to 2
end if
if item 1 of theCheckboxes is "Sketch" then
set checkBoxSketch to 1
else
set checkBoxSketch to 2
end if
delay 1
-- Below, insert either checkBoxSketch for "Sketch" or checkBoxDraw for "Draw"
click checkbox checkBoxDraw of toolbar 1 of window 1 of application process "Preview"
end tell
-- without these next following lines, the toolbar "Draw" or "Sketch" do not appear to be selected
tell application "Preview" to tell window 1
set visible to false
set visible to true
end tell
delay 3
Другой грязный взлом был бы к flock()
"локальный" файл, и только открывается / пишут в файл NFS, если Вы держите блокировку на локальном файле.
Править: от flock()
страница:
скопление () не будет работать над NFS и многими другими сетевыми файловыми системами. Проверьте свою документацию по операционной системе на большее количество деталей.
Редактирование 2:
Конечно, там всегда использует базу данных для synchonise доступа (я предполагаю, что Ваше приложение использует дб). Это было бы настоящим хитом производительности при выполнении большого входа все же.
Если это только для входа, Вам на самом деле нужен централизованный файл журнала? Вы могли зарегистрироваться локально (и даже объединить журналы, когда они вращаются в конце дня в случае необходимости)?
Даже при том, что Вы не можете скапливаться (), файлы на NFS и вводе-выводе могут быть asynchroneous, операции каталога на NFS являются атомарными. Это означает, что в в любой момент времени, каталог делает или не существует.
Для реализования собственной опции блокировки NFS проверьте или создайте каталог, когда Вы хотите заблокировать ее и удалить ее, когда Вы сделаны.
К сожалению, это, вероятно, не совместимо с любым другим приложением, которое Вы не записали сами.
Операции каталога НЕ являются атомарными под NFSv2 и NFSv3 (отошлите к книге 'NFS, Проиллюстрированный' Brent Callaghan, ISBN 0-201-32570-5; Brent является ветераном NFS в Sun).
NFSv2 начинает две атомарных операции:
С NFSv3 создать вызов является также атомарным.
Зная это, можно реализовать спин-блокировки для файлов и каталогов (в оболочке, не PHP):
заблокируйте текущий dir:
while ! ln -s . lock; do :; done
заблокируйте файл:
while ! ln -s ${f} ${f}.lock; do :; done
разблокируйте (предположение, рабочий процесс действительно получил блокировку):
разблокируйте текущий dir:
mv lock deleteme && rm deleteme
разблокируйте файл:
mv ${f}.lock ${f}.deleteme && rm ${f}.deleteme
Удалите является также не атомарным, поэтому сначала переименовывание (который является атомарным), и затем удаление.
Для символьной ссылки и переименовывают вызовы, оба имен файлов должны находиться в той же файловой системе. Мое предложение: используйте только простые имена файлов и поместите файл и блокировку в тот же каталог.
Один подход мог быть должен настроить экземпляр Кэш-памяти, совместно использованный каждым из Ваших виртуальных серверов. Вы могли обезьянничать flock()
вставляя запись имени файла для кэширования, когда Вы запускаете локальные операции файла и стирание его по окончании.
Каждый сервер может получить доступ к этому пулу перед операцией файла и видеть, присутствует ли эта "блокировка", например.
// Check for lock, using $filename as key
$lock = $memcache->get($filename);
if(!$lock) {
// Set lock in memcache for $filename
$memcache->set($filename, 1);
// Do file operations...
// Blow away "lock"
$memcache->delete($filename);
}
Не самое изящное из решений, но должен позволить Вам управлять блокировками со всех серверов в Вашей установке с относительной простотой.
Должен просто использовать кэш-память, добавляют и избегают состояния состязания.
if ($memcache->add($filename, 1, 1))
{
$memcache->delete($filename);
}
Можно также использовать dio_fcntl() для блокировки файлов на томах NFS. Для этого требуется пакет dio, который может не быть частью вашей установки php по умолчанию.