web-dev-qa-db-ja.com

PHPを使用してcronジョブを作成する方法

私は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つのファイルが同じフォルダにあるとします。

間違ったコードはありますか?間違っていたら、どうやってそれを直すか教えてください。

87
user2738520

これは私がこれまでに見つけた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.

enter image description here

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

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

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

30 8 * * 6 home/path/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クラス。
55
Nikolay Ivanov

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
30
Alister Bulman

Alisterに加えて、サーバ上のsshセッションでcrontab -eと入力することで、通常crontabを編集できます(常にそうとは限りません)。

星印は次のように表します(*はこの単位のすべてを意味します)。

[Minute] [Hour] [Day] [Month] [Day of week (0 =sunday to 6 =saturday)] [Command]

こちら についてもっと読むことができます

10
Big Ginger Nerd

Linux/ubuntu端末に次のように入力します。

 crontab -e 

エディタを選択し(いつかエディタを要求します)、これを毎分実行します

*       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null
1
madhu131313
$command = "php ".CRON_PATH.php ";
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $command, "r"));
}else{
Shell_exec($command ." > /dev/null &");
}
1
shubhi agrawal

毎分動作するようにこのようなcronjobを作成してください

*       *       *       *       *       /usr/bin/php path/to/cron.php &> /dev/null
0
rams0610

これを解決する簡単な方法があります:1分ごとにcronでphpファイルを実行することができ、php実行ファイルの中で "if"ステートメントを "今"のときに実行するようにすることができます。

<?/** suppose we have 1 hour and 1 minute inteval 01:01 */

$interval_source = "01:01";
$time_now = strtotime( "now" ) / 60;
$interval = substr($interval_source,0,2) * 60 + substr($interval_source,3,2);


if( $time_now % $interval == 0){
/** do cronjob */
}
0
maxkuku

なぜあなたはcurlを使わないのですか?論理的には、あなたがphpファイルを実行するなら、あなたはあなたのブラウザ上のURLによってそれを実行するでしょう。 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);
}
0
Ecko Santoso

まずユーザー名とパスワードを入力してSSHサーバーを開き、デフォルトのrootユーザー(すべての権限を持つユーザー)に変更してから、以下の手順に従います。

  1. コマンドcrontab -lを入力すると、すべてのcronjobのリストが表示されます。
  2. crontab -eを入力すると、すべてのcronジョブを含むファイルが開きます。
  3. Cronjobスケジュールでファイルをmin hr dayofmonth month dayofweek pathtocronjobfileとして編集し、ファイルを保存します。
  4. これで、crontab: installing new crontabという応答が表示されるようになりました。ここで、cronジョブがそこにリストされるcronjobのリストをもう一度確認してください。
0
Gokulpriya