私は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つのファイルが同じフォルダにあるとします。
間違ったコードはありますか?間違っていたら、どうやってそれを直すか教えてください。
これは私がこれまでに見つけた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 * * 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
記事全文のリンクをご覧ください。
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
Alisterに加えて、サーバ上のsshセッションでcrontab -eと入力することで、通常crontabを編集できます(常にそうとは限りません)。
星印は次のように表します(*はこの単位のすべてを意味します)。
[Minute] [Hour] [Day] [Month] [Day of week (0 =sunday to 6 =saturday)] [Command]
こちら についてもっと読むことができます 。
Linux/ubuntu端末に次のように入力します。
crontab -e
エディタを選択し(いつかエディタを要求します)、これを毎分実行します
* * * * * /usr/bin/php path/to/cron.php &> /dev/null
$command = "php ".CRON_PATH.php ";
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $command, "r"));
}else{
Shell_exec($command ." > /dev/null &");
}
毎分動作するようにこのようなcronjobを作成してください
* * * * * /usr/bin/php path/to/cron.php &> /dev/null
これを解決する簡単な方法があります: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 */
}
なぜあなたは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);
}
まずユーザー名とパスワードを入力してSSHサーバーを開き、デフォルトのrootユーザー(すべての権限を持つユーザー)に変更してから、以下の手順に従います。
crontab -l
を入力すると、すべてのcronjobのリストが表示されます。crontab -e
を入力すると、すべてのcronジョブを含むファイルが開きます。min hr dayofmonth month dayofweek pathtocronjobfile
として編集し、ファイルを保存します。crontab: installing new crontab
という応答が表示されるようになりました。ここで、cronジョブがそこにリストされるcronjobのリストをもう一度確認してください。