0

コーディングしているサイト(phpで)のスケジューラー(1回限りのアクション)が必要です。2つのアイデアがありました。

1- crontabを使用してphpスクリプトを実行し、スケジュールされたアクションのデータベースと照合して、現在の時刻より古いアクションを実行します。

2-「at」コマンドを使用してさまざまなタスクをスケジュールします。

2番目のオプションははるかに優れていて単純に見えるので、それが私がやろうとしていることです。ただし、PHPインタープリターを使用してコマンドを実行するように「at」に指示する方法は見つかりませんでした。これまで、ファイルを実行する単一のコマンドを含む.shスクリプトを作成してきました。 phpインタープリター。これは最適な設定とはほど遠いので、次のように「at」を介してphpコードを直接実行できればと思います。

at -e php -f /path/to/phpscript time

出来ますか?男性でもオンラインでも、bash以外の環境を使用することについては何も見つかりませんでした。

4

2 に答える 2

2

(またはphpスクリプトが保存されている場所)を先頭に追加phpscriptして、実行可能にすることができます。これはまさに構文の目的です。#!/usr/bin/php/path/to/phpscript#!

明確にするために、次のようにphpscriptなります。

#!/usr/bin/php

...your code goes here
于 2012-08-25T18:00:55.767 に答える
0

指定したコマンドatはによって実行されます/bin/shが、shは、直接または指定されたインタプリタによって実行された任意のコマンドを呼び出すことができます。

以下は、bashシェルを使用するUbuntu12.04システムで動作します。

$ cat hello.php
#!/usr/bin/php
<?php
    echo "Hello, PHP\n";
?>
$ echo "$PWD/hello.php > hello.php.out" | at 16:11
warning: commands will be executed using /bin/sh
job 4 at Sat Aug 25 16:11:00 2012
$ date
Sat Aug 25 16:11:05 PDT 2012
$ cat hello.php.out
Hello, PHP
$ 

場合によっては、環境変数を正しく設定するために追加の作業を行う必要があります(この単純なケースでは必要ありません)。マニュアルページの引用:

atbatchの両方で、コマンドは標準入力または-fオプションで指定されたファイルから読み取られて実行されます。作業ディレクトリ、環境(変数BASH_VERSINFODISPLAYEUIDGROUPSSHELLOPTSTERMUID、および_を除く)、およびumaskは、呼び出し時から保持されます。

atは現在setuidプログラムとして実装されているため、他の環境変数(LD_LIBRARY_PATHLD_PRELOADなど)もエクスポートされません。これは将来変更される可能性があります。回避策として、これらの変数をジョブで明示的に設定してください。

于 2012-08-25T23:18:29.987 に答える