Запустите консольную программу из AppleScript и следите за ее состоянием - PullRequest
1 голос
/ 29 мая 2011

Я попытался запустить консольную программу из AppleScript и перезапустить, когда она вылетает. Я написал этот код

repeat
     do shell script "/path/to/program"
end repeat

Но он зависает и Mac не может перезагрузиться. Как я могу поместить "do shell script" в другой поток?

1 Ответ

1 голос
/ 29 мая 2011

Все, что вам нужно сделать, это поставить символ «&» в конце вашей команды.Это отправляет его на задний план.Однако я бы не стал использовать ваш код.Этот повторный цикл будет выполняться вечно и порождать новые процессы до тех пор, пока он выполняется.Лучше всего было бы запустить «открытый скрипт», который периодически проверяет, запущен ли процесс.Если этого не произойдет, то яблочный скрипт может запустить его.Повторяющийся цикл - это не то, что вы хотите.Попробуйте этот код.Сохраните его как приложение и установите флажок «оставаться открытым» в окне сохранения.

on run

end run

on idle
    set runShellScript to false

    tell application "System Events"
        if not (exists process "processName") then
            set runShellScript to true
        end if
    end tell

    if runShellScript then do shell script "/path/to/program &"

    return 30 -- the script will stop for 30 seconds then run again until you quit the applescript
end idle
...