我使用 iPad 远程开发应用程序(回到 iMac 后进行测试)并对计算机上的文件进行其他小修改。到目前为止,我一直在使用适用于 iOS 和 iMac 的 TeamViewer,它一直很有效,直到我尝试从 Windows 7 计算机访问我的 iMac。然后,有一次,TeamViewer 崩溃了。
我正在寻找一种当远程程序失败时重新启动 Mac 的方法。有没有可以做到这一点的 Applescript?
另外,是否有一个具有兼容 iOS 应用程序并支持远程重启的 VNC 程序?
答案1
您无需重新启动即可重新启动 TeamViewer;您可以launchd
监控该过程并在其崩溃时重新启动它。
首先,您需要识别实际的可执行文件。打开终端并查看 TeamViewer 软件包 - 可执行文件可能位于,/Applications/TeamViewer.app/Contents/MacOS/TeamViewer
但您的里程可能会有所不同。要检查您是否找到了正确的路径,请在终端中输入它 - 如果 TeamViewer 启动,您可能已经找到了它。或者,在 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
和键/值对,并在运行 load 时GroupName
使用。要删除该项目(例如,如果您确实需要退出 TeamViewer),只需将上述命令中的 load 替换为 unload。sudo
launchd
或者,林贡为 launchd 提供了图形界面,可能会更容易。
答案2
您可以在 iMac 上设置一个任务来检查 TeamViewer 进程是否存在,如果未找到则重新启动。但为什么不重新启动进程而不是重新启动整个机器呢?
答案3
如果您熟悉命令行,这相当简单。iOS 上有许多 SSH 客户端:您需要从共享偏好设置窗格中激活“远程登录”。
完成此操作并处理好适当的网络细节后,重新启动时,您需要做的就是通过 SSH 进入 iMac 并运行$ sudo shutdown -r now
,这将重新启动机器。假设这就是启动并运行 TeamViewer 所需要做的一切,那么应该可以正常工作。
其他人建议重新启动该进程。同样,假设激活 TeamViewer 所需要做的就是启动该应用程序,您首先需要强制退出现有的挂起进程:类似于$ sudo killall TeamViewer
,然后使用$ open /Applications/TeamViewer.app
或类似命令重新启动该应用程序。