I have the following workflow that I need to execute on a daily basis for a period of days:

The computers start at a specified time, Mathematica and a specific Mathematica notebook launch and evaluate. Then I need to quit Mathematica programmatically and let the relevant schedules shut down the computers. I've worked out everything here except the highlighted step to quit Mathematica with an Applescript application.

To start with I created a simple application using the

**Applescript Editor**:

```
tell application "Mathematica" to quit
```

This will shut down Mathematica if the open notebook has been saved which the notebook does itself. Now I need to add a timer to the Applescript application.

An earlier question Automator workflow or AppleScript to close Safari after a period of time does something similar that I hoped to adapt to my needs. It shows the following code:

```
global quit_after, check_every
set quit_after to 2700
set check_every to 10
set minute to quit_after / 60
display dialog "Check is performed every " & check_every & " seconds. Things will be quit after " & minute & " minutesof system inactivity."
on reopen
display dialog "Check is performed every " & check_every & " seconds. Things will be quit after " & minute & " minutes of system inactivity."
end reopen
on idle
set idletime to do shell script "echo $((`ioreg -c IOHIDSystem | sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'` / 1000000000))"
if (idletime as integer) > quit_after then
tell application "System Events"
if ((name of processes) contains "Safari") then
tell application "Safari" to quit
end if
end tell
end if
return check_every
end idle
```

I don't need the dialog boxes and I want it to close Mathematica after say 15 minutes, so I tried this as a next step towards a solution.

```
global quit_after, check_every
set quit_after to 900
set check_every to 10
set minute to quit_after / 60
on idle
set idletime to do shell script "echo $((`ioreg -c IOHIDSystem | sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'` / 1000000000))"
if (idletime as integer) > quit_after then
tell application "System Events"
if ((name of processes) contains "Mathematica") then
tell application "Mathematica" to quit
end if
end tell
end if
return check_every
end idle
```

It doesn't work.

So I have two questions, can anyone suggest:

- How to get my modified code to work?
- How to alter it so it will shut down Mathematica at a specified time on weekdays only?

The latter would work better for me as I think I'd have fewer conflicts if I shut down Mathematica at a specific time rather than after a certain amount of time has passed.

## Best Answer

Here's why it doesn't work.

HIDIdleTimeis the number of seconds of inactivity, so unless the user do absolutely nothing during fifteen minutes, your script doesn't work.Here's how to do this in AppleScript.