Я использую свой iPad для удаленной разработки приложений (я тестирую, когда возвращаюсь к своему iMac) и для внесения других небольших изменений в файлы на моем компьютере. До сих пор я использовал TeamViewer для iOS и iMac, и это работало, пока я не попытался получить доступ к своему iMac с машины Windows 7. Затем, однажды, TeamViewer завис.
Я ищу способ перезагрузить свой Mac, когда удаленная программа дает сбой. Есть ли Applescript, который может это сделать?
Кроме того, существует ли программа VNC с совместимым приложением для iOS, поддерживающим удаленную перезагрузку?
решение1
Вам не нужно перезагружать компьютер, чтобы повторно запустить TeamViewer; вы можете launchd
отслеживать процесс и перезапустить его в случае сбоя.
Во-первых, вам нужно будет определить фактический исполняемый файл. Откройте терминал и посмотрите в пакете TeamViewer — исполняемый файл, скорее всего, будет в , /Applications/TeamViewer.app/Contents/MacOS/TeamViewer
но ваш пробег может отличаться. Чтобы проверить, что вы нашли правильный путь, введите его в терминале — если TeamViewer запустится, вы, вероятно, нашли его. В качестве альтернативы откройте Activity Monitor во время работы TeamViewer, определите процесс TeamViewer и нажмите «Проверить» на панели инструментов. Затем на вкладке Открытые файлы и порты исполняемый файл, скорее всего, будет первой или второй записью в списке (после /
).
Как только вы узнаете, какую программу вы отслеживаете, вы можете создать launchd
список свойств. Это XML-файл, поэтому вы можете сделать это с помощью вашего любимого текстового редактора или же вы можете использовать редактор списка свойств, который устанавливается вместе с Mac OS X Dev Tools. Создайте следующее:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>some.meaningful.name</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/path/we/identified/earlier</string>
</array>
</dict>
</plist>
Сохраните это в ~/Library/LaunchAgents/some.meaningful.name.plist
, затем откройте терминал и выполните:
launchctl load ~/Library/LaunchAgents/some.meaningful.name.plist
Это заставит launchd загрузить элемент, который заставит его отслеживать указанную программу и, если она по какой-либо причине выйдет, она будет перезапущена. Это будет работать только если ваш пользователь вошел в систему. Для запуска при загрузке поместите plist в /Library/LaunchDaemons/some.meaningful.name.plist
, добавьте UserName
и GroupName
пары ключ/значение и используйте sudo
при запуске launchd
load. Чтобы избавиться от элемента (если вам действительно нужно выйти из TeamViewer, например), просто замените load в приведенной выше команде на unload.
В качестве альтернативы,лингонпредоставляет графический интерфейс для launchd и может быть проще.
решение2
Вы можете настроить задачу на iMac для проверки существования процесса TeamViewer и перезагрузки, если он не найден. Но почему бы просто не перезапустить процесс, а не перезагружать всю машину?
решение3
Это довольно тривиально, если вы знакомы с командной строкой. Для iOS существует множество клиентов SSH: вам нужно будет активировать «Удаленный вход» на панели настроек общего доступа.
После того, как это будет сделано и все необходимые сетевые мелочи будут выполнены, все, что вам нужно будет сделать для перезагрузки, это подключиться по SSH к вашему iMac и запустить $ sudo shutdown -r now
, что перезагрузит машину. Если предположить, что это все, что вам нужно сделать для запуска TeamViewer, то все должно работать нормально.
Кто-то еще предложил перезапустить процесс. Опять же, если предположить, что все, что вам нужно сделать для активации TeamViewer, это запустить приложение, то вам сначала нужно будет принудительно завершить существующий зависший процесс: что-то вроде $ sudo killall TeamViewer
, а затем перезапустить приложение с помощью $ open /Applications/TeamViewer.app
или чего-то похожего.