我在mac mini上运行了一堆本地信息亭,并且一直使用dropbox来保持所有文件同步。但是 - 由于这些事情的防火墙设置,Dropbox更新已经很晚了。我找到的解决方法是让dropbox退出并定期重启以强制它更新。
我的问题是 - 因为所有这些都在MAMP上运行php应用程序 - 有没有办法从php启动本地应用程序?我可以通过这样的方式杀死Dropbox:
$ killit = killall -KILL Dropbox
;
但重启它并不起作用。我试过这样做:
$ start_dbox = open /Applications/Dropbox.app
;
无济于事。有没有更好的方法来自动执行关闭和重新打开本地应用程序的过程?
答案 0 :(得分:0)
我尝试远程控制软件时遇到了类似的问题。 'open'命令必须作为当前登录的控制台用户执行,或者从控制台拥有的终端执行(例如Terminal.app)。
如果您将PHP更改为重定向STDERR,您应该会看到'open'返回的错误:
$start_dbox = "open /Applications/Dropbox.app 2>&1";
然后应从系统调用中返回以下文本:
LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Dropbox.app.
我过去使用的一个解决方法是在文件系统的某个位置创建一个锁文件,您的PHP脚本可以写入该文件,您的控制台用户可以读取该文件。然后,您可以创建一个以控制台用户身份运行的cron,并定期检查锁定文件以查看是否需要重新启动Dropbox。
答案 1 :(得分:0)
我实际上可以通过创建一个包含以下内容的shell脚本来解决这个问题:
#!/bin/sh
export DYLD_LIBRARY_PATH=""
osascript -e 'tell application "Dropbox" to activate'
将其保存为start_db.sh并将其删除到我的root apache目录中(因此该用户没有权限问题)。
然后在我的php文件中我能够做到:
$start_dbox = exec('/full/path/to/start_db.sh');
像魅力一样工作。 Dropbox现在退出并重新启动,没有任何问题。