2

我在 mac mini 上运行了一堆本地信息亭,并且一直在使用 Dropbox 来保持所有文件同步。但是 - 由于这些东西所在的防火墙设置,保管箱更新最近很粗略。我发现的一种解决方法是让 dropbox 退出并定期重新启动以强制其更新。

我的问题是——因为所有这些都在 MAMP 上运行 php 应用程序——有没有办法从 php 启动本地应用程序?我可以通过执行以下操作来杀死 Dropbox:

$killit = killall -KILL Dropbox;

但是重新启动它并不相同。我试过这样做:

$start_dbox = open /Applications/Dropbox.app;

无济于事。有没有更好的方法来自动化关闭和重新打开本地应用程序的过程?

4

2 回答 2

1

我在尝试远程控制软件时遇到了类似的问题。'open' 命令必须以当前登录的控制台用户身份执行,或者从控制台拥有的终端(例如 Terminal.app)执行。

如果您将 PHP 更改为重定向 STDERR,您应该会看到“打开”返回的错误:

$start_dbox = "open /Applications/Dropbox.app 2>&1";

然后应该从系统调用返回以下文本:

LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Dropbox.app.

我过去使用的一种解决方法是在文件系统的某处创建一个锁定文件,您的 PHP 脚本可以写入该文件并且您的控制台用户可以读取该文件。然后,您可以创建一个以控制台用户身份运行的 cron,并定期检查锁定文件以查看它是否需要重新启动 Dropbox。

于 2012-06-28T23:55:20.170 回答
0

我实际上能够通过使用以下内容创建一个 shell 脚本来解决这个问题:

#!/bin/sh
export DYLD_LIBRARY_PATH=""

osascript -e 'tell application "Dropbox" to activate'

将其保存为 start_db.sh 并将其放在我的 apache 根目录中(因此该用户没有权限问题)。

然后在我的 php 文件中,我能够做到:

$start_dbox = exec('/full/path/to/start_db.sh');

像魅力一样工作。Dropbox 现在退出并重新启动,没有任何问题。

于 2012-06-30T18:31:38.280 回答