Help us understand the problem. What is going on with this article?

【PHP】バッチ処理をcronで自動実行する

バッチ処理とは

まとめて実施される処理のこと。

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典〜バッチ処理

cronとは

cronとは、ジョブを自動実行するためのデーモンプロセス(バックグラウンドプロセス)のこと。

cronを設定するコマンドがcrontabコマンド

crontabコマンドについてまとめました 【Linuxコマンド集】

実際に動かす

ファイル構造

batch_test
  ├── add_time.php
  └── time.txt

add_time.php

現在時刻をtxtファイルに追記するだけのプログラムです。

cronで処理を実行する場合、ファイルパスは絶対パスで記述する必要があります。requireincludeを使用するときも同様です。

add_time.php
<?php
// time.txtに現在時刻を追記する
$file = '/usr/local/var/www/htdocs/batch_test/time.txt';
$current = file_get_contents($file);

date_default_timezone_set('Asia/Tokyo');
$current .= date("Y-m-d H:i:s")."\n";

file_put_contents($file, $current);

time.txt

追記用のファイルです。
こんな感じで現在時刻が追記されていきます。

time.txt
2019-02-09 22:20:00
2019-02-09 22:21:00
2019-02-09 22:22:00

ファイルを作成したら一度処理を実行してみます。
動作に問題がなければ、引き続きcronの設定に移ります。

$ cd batch_test
$ php add_time.php

cronの設定

cronの設定をcrontabファイルに記述します。

crontabファイルは「この時間(間隔)でこのファイルの処理を実行する」 という内容を記述するファイルです。crontab -eコマンドで編集できます。

以下の順番で記述します。

  1. 処理を実行する時間(または間隔)
  2. PHPのパス
  3. 処理が記述されているファイルのパス

プログラムの自動実行にcronを使おう サンプルプログラム付きで設定も簡単

最初にPHPの場所を確認します。パスは全て絶対パスで記述する必要があります。

$ which php
/usr/local/opt/php@7.1/bin/php

crontab -lコマンドでcronの設定を確認できます。
現在は何も設定されていません。

$ crontab -l
crontab: no crontab for name

crontab -eコマンドを実行するとviエディタが開くので、処理内容を記述します。(エディタは環境によって異なるかもしれません。)

add_time.phpの処理を1分おきに実行するように設定します。

*/1 * * * * /usr/local/opt/php@7.1/bin/php /usr/local/var/www/htdocs/batch_test/add_time.php

:wpで確かに保存しましたが、エラーが出てしまいました・・・

$ crontab -e
crontab: no crontab for name - using an empty one
crontab: "/usr/bin/vi" exited with status 1

$ crontab -e
crontab: no crontab for name - using an empty one
crontab: no changes made to crontab

これは:wqの前に:set backupcopy&viを実行することで解決できました。

crontab でno changes made to crontabで変更できない時

これで登録されました!

$ crontab -e
crontab: no crontab for name - using an empty one
crontab: installing new crontab

$ crontab -l
*/1 * * * * /usr/local/opt/php@7.1/bin/php /usr/local/var/www/htdocs/batch_test/add_time.php

もっと複雑な処理をさせたいのですが、今日はこの辺で。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away