Use launchctl to fire an AppleScript script periodically
- by Daktari
I have written an AppleScript that lets me back up a particular file. The script runs fine inside AppleScript Editor: it does what it's supposed to do perfectly. So far so good.
Now I'd like to run this script at timed intervals. So I use launchctl & .plist to make this happen. That's where the trouble starts.
the script is loaded at set interval by launchctl
the AppleScript Editor (when open) brings its window (with that script) to the foreground but no code is executed
when AppleScript Editor is not running, nothing seems to be happening at all
Any ideas as to why this is not working?
--
After editing (as per Daniel Beck's suggestions) my plist now looks like:
<?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>
and the AppleScript I'm trying to run:
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