109

cronジョブの使用は初めてです。書き方もわかりません。ネットで調べてみたのですが、よくわかりません。コードを毎分実行する cron ジョブを作成したいと考えています。私はそれを作成するためにPHPを使用しています。機能していません。

run.php (毎分実行されるコード)

<?php

echo "This code will run every minute";

?>

cron.php

<?php

$path = dirname(__FILE__);
$cron = $path . "/run.php";
echo exec("***** php -q ".$cron." &> /dev/null");

?>

これら 2 つのファイルが同じフォルダーにあるとします。

私がしたコードは間違っていますか?間違っていたら、どう直せばいいか教えてください。

4

12 に答える 12

74

これは、私がこれまでに見つけた PHP のコードでの最良の説明です。

http://code.tutsplus.com/tutorials/managing-cron-jobs-with-php--net-19428

要するに:

新しいジョブをスケジュールする構文は、一見難しそうに見えるかもしれませんが、分解してみると、実際には比較的簡単に理解できます。cron ジョブには常に 5 つの列があり、それぞれが時系列の「オペレーター」を表し、その後に実行するフル パスとコマンドが続きます。

* * * * * home/path/to/command/the_command.sh

時系列の各列には、タスクのスケジュールとの特定の関連性があります。それらは次のとおりです。

Minutes represents the minutes of a given hour, 0-59 respectively.
Hours represents the hours of a given day, 0-23 respectively.
Days represents the days of a given month, 1-31 respectively.
Months represents the months of a given year, 1-12 respectively.
Day of the Week represents the day of the week, Sunday through Saturday, numerically, as 0-6 respectively.

ここに画像の説明を入力

たとえば、毎月 1 日の午前 12 時にタスクをスケジュールする場合、次のようになります。

0 0 1 * * ホーム/パス/to/command/the_command.sh

毎週土曜日の午前 8 時 30 分に実行するタスクをスケジュールしたい場合は、次のように記述します。

30 8 * * 6 ホーム/パス/to/command/the_command.sh

スケジュールをさらにカスタマイズするために使用できる演算子もいくつかあります。

Commas is used to create a comma separated list of values for any of the cron columns.
Dashes is used to specify a range of values.
Asterisksis used to specify 'all' or 'every' value

記事全体のリンクにアクセスすると、次のように説明されています。

  1. 手動で入力/編集する場合の cronjob の形式は何ですか。
  2. SSH2 ライブラリで PHP を使用して、編集する crontab のユーザーとして認証する方法。
  3. 認証、編集、および crontab エントリの削除に必要なすべてのメソッドを備えた完全な PHP クラス。
于 2014-07-08T06:32:54.417 に答える
38

cron.php を実行しようとしているのと同じ方法で、別の PHP スクリプトを実行できます。ただし、CLI インターフェイスを介して行う必要があります。

#!/usr/bin/env php
<?php
# This file would be say, '/usr/local/bin/run.php'
// code
echo "this was run from CRON";

次に、crontab にエントリを追加します。

* * * * * /usr/bin/php -f /usr/local/bin/run.php &> /dev/null

run.php スクリプトに実行権限があれば、/usr/bin/php の部分も含めずに、crontab に直接リストすることができます。スクリプトの「env php」部分は、実際に PHP コードを実行するための適切なプログラムを見つけます。したがって、「実行可能」バージョンの場合、ファイルに実行権限を追加します。

chmod +x /usr/local/bin/run.php

次に、次のエントリを crontab に追加します。

* * * * * /usr/local/bin/run.php &> /dev/null
于 2013-09-11T09:37:10.790 に答える
4

linux/ubuntu ターミナルで次のように入力します。

 crontab -e 

エディターを選択し(エディターを要求する場合があります)、これを毎分実行します

*       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null
于 2014-04-09T05:08:05.773 に答える
2

このタスクには、プロジェクトCronを Linux cronjob と組み合わせて使用​​することをお勧めします。PHP コードでランタイムを構成し、バックグラウンド ジョブをサポートし、使いやすいです。

最初のステップでは、毎分 PHP スクリプトを呼び出します。

* * * * * /usr/local/bin/run.php &> /dev/null

2 番目のステップでは、cron/cronパッケージを使用して、PHP でランタイムを直接構成します。

$deprecatedStatus = new ShellJob();
$deprecatedStatus->setCommand('cd /app && /usr/local/bin/php cron/updateDeprecatedStatus.php');
$deprecatedStatus->setSchedule(new CrontabSchedule('* * * * */2'));


$displayDate = new ShellJob();
$displayDate->setCommand('cd /app && /usr/local/bin/php cron/updateDisplayDate.php');
$displayDate->setSchedule(new CrontabSchedule('* * * * */5'));

リンクされたリポジトリで使用方法の詳細を見つけました。

于 2020-07-02T10:08:51.940 に答える
-2

このような cronjob を作成して、毎分処理します

*       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null
于 2013-09-11T09:33:42.183 に答える
-2

why you not use curl? logically, if you execute php file, you will execute that by url on your browser. its very simple if you run curl

while(true)
{
    sleep(60); // sleep for 60 sec = 1 minute

    $s = curl_init();
    curl_setopt($s,CURLOPT_URL, $your_php_url_to_cron); 
    curl_exec($s); 
    curl_getinfo($s,CURLINFO_HTTP_CODE); 
    curl_close($s);
}
于 2017-11-01T17:25:15.603 に答える
-2
function _cron_exe($schedules) {
        if ($obj->get_option('cronenabledisable') == "yes") {
            // $interval = 1*20;
            $interval = $obj->get_option('cronhowtime');
            if ($obj->get_option('crontiming') == 'minutes') {
                $interval = $interval * 60;
            } else if ($obj->get_option('crontiming') == 'hours') {
                $interval = $interval * 3600;
            } else if ($obj->get_option('crontiming') == 'days') {
                $interval = $interval * 86400;
            }
            $schedules['hourlys'] = array(
                'interval' => $interval,
                'display' => 'cronjob'
            );
            return $schedules;
        }

}
于 2015-01-14T06:00:17.997 に答える