Используйте launchctl для увольнения сценария AppleScript периодически

Я записал AppleScript, который позволяет мне создать резервную копию конкретного файла. Сценарий хорошо работает в Редакторе AppleScript: это делает то, что это, как предполагается, делает отлично.Пока все хорошо.

Теперь я хотел бы запустить этот скрипт в синхронизированных интервалах. Таким образом, я использую launchctl и .plist, чтобы заставить это произойти. Это - то, где проблема запускается.

  • сценарий загружается в интервале набора launchctl
  • Редактор AppleScript (когда открытый) приносит его окно (с тем сценарием) к переднему плану, но никакой код не выполнен
  • когда Редактор AppleScript не работает, ничего, кажется, не происходит вообще

Какие-либо идеи относительно того, почему это не работает?

--

После редактирования (согласно предложениям Daniel Beck) мой plist теперь похож:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<false/>
<key>Label</key>
<string>com.opera.autosave</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string>
<string>/Users/user_name/Library/Scripts/opera_autosave_bak.scpt</string>
</array>
<key>StartInterval</key>
<integer>30</integer>
</dict>
</plist>

и AppleScript я пытаюсь работать:

on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning

--only run this script when Opera is running
if appIsRunning("Opera") then
    set base_path to "user_name:Library:Preferences:Opera Preferences:sessions:"
    set autosave_file to "test.txt"
    set autosave_file_old to "test_old.txt"
    set autosave_file_older to "test_older.txt"
    set autosave_file_oldest to "test_oldest.txt"
    set autosave_path to base_path & autosave_file
    set autosave_path_old to base_path & autosave_file_old
    set autosave_path_older to base_path & autosave_file_older
    set autosave_path_oldest to base_path & autosave_file_oldest
    set copied_file to "test copy.txt"
    set copied_path to base_path & copied_file

    tell application "Finder"
        duplicate file autosave_path
        delete file autosave_path_oldest
        set name of file autosave_path_older to autosave_file_oldest
        set name of file autosave_path_old to autosave_file_older
        set name of file copied_path to autosave_file_old
    end tell

end if
1
задан 13.04.2011, 14:03

1 ответ

Сохраните сценарий как приложение в редакторе AppleScript (Файл» Сохраняют как …), или измените вызов в своем launchd plist открываться osascript (Терминальный способ выполнить AppleScript) с файлом сценария как аргумент.

1
ответ дан 17.12.2019, 00:21

Теги

Похожие вопросы