2

私はMacminiでたくさんのローカルキオスクを実行していて、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をリダイレクトすると、「open」が返されるというエラーが表示されます。

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

次に、システムコールから次のテキストが返されます。

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

私が過去に使用した回避策の1つは、ファイルシステムのどこかにロックファイルを作成することです。これは、PHPスクリプトが書き込み、コンソールユーザーが読み取ることができます。次に、コンソールユーザーとして実行され、定期的にロックファイルをチェックして、Dropboxを再起動する必要があるかどうかを確認するcronを作成できます。

于 2012-06-28T23:55:20.170 に答える
0

私は実際に次のシェルスクリプトを作成することでこれを解決することができました:

#!/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 に答える