1

phpスクリプト(apacheユーザー)がATデーモンを使用してタスクをスケジュールできるようにする方法はありますか?

次のように、phpスクリプトからatdにタスクをパイプします。

exec( "echo 'date > /some/dir/date.txt' | at now + 1 minute > /dev/null &" );

コマンドライン(ルート)からphpスクリプトを実行すると、すべて問題ありませんが、httpリクエストを介してスクリプトを実行すると、atジョブが作成されません。

apacheにはシェルアクセスがないことを知っていますが、回避策はありますか?

4

2 に答える 2

0

exec()シェルを使用していないため、パイプなどは使用できません。

バックティックを使用するshell_exec()か、system()代わりにそれを機能させます。

shell_exec("echo 'date > /some/dir/date.txt' | at now + 1 minute");
于 2012-12-20T15:03:53.003 に答える
0

スクリプトを実行するアカウント(Apacheまたはcgiユーザー)にシェルアクセスがない場合、機能していないシェル(/ bin / badなど)が後でコマンドを実行しようとするため、atは機能しません。

何かを実行できるかどうかを確認します。

$output = array();
exec('whoami',$output);
print_r($output);

これが機能する場合は、(擬似コード)のようなものを試すことができます。

write "date > /some/dir/date.txt" in /tmp/atcmd
exec("/usr/bin/at -f /tmp/atcmd now + 1 minute");

したがって、次のものが必要です。-後でコマンドを実行するためのシェル-exec関数を実行するためのphp内の許可-/ etc / at。{deny、allow}によって作成された問題はありません

これは基本的に(おそらく)php-cgiで実行されるPHPが「実際の」アカウントに切り替えられる必要があることを意味します。

私が今考えることができる他の唯一の解決策は、Webサーバーで必要なスクリプトを作成し、wgetを使用してアクセスできるマシンでatjobを実行することです。

echo "wget -q http://myserver.mydomain/my/atscript"  | at now + 1 minute

人々は実際にcronのような振る舞いのためにそのような構造を使用します。ねえ、私は私のホスティングサービスでそのようなもののためのサービスをセットアップするかもしれません:-)

于 2013-02-19T13:22:34.180 に答える