2012-06-28 21 views
2

我在mac mini上運行了一堆本地Kiosk,並一直使用Dropbox保持所有文件同步。然而 - 由於防火牆設置在這些地方,Dropbox更新已經很晚了。我找到的解決方法是讓dropbox退出並定期重新啓動以強制更新。如何從php運行MAMP在OSX上啓動本地應用程序?

我的問題是 - 因爲所有這些都在MAMP上運行php應用程序 - 有沒有辦法從PHP啓動本地應用程序?我可以通過這樣做來殺死Dropbox:

$ killit = killall -KILL Dropbox;

但它重新啓動它不起作用。我試過這樣做:

$ start_dbox = open /Applications/Dropbox.app;

無濟於事。有沒有更好的方法來自動化關閉和重新打開本地應用程序的過程?

+0

你有沒有考慮使用cron來殺死,然後重新啓動DB定期?從安全角度來看,這實際上可能更安全。 – mkoistinen

回答

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現在退出並重新啓動,沒有問題。

0

我有類似的問題試圖遠程控制軟件。 '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。

相關問題