44
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

バッチ処理とは

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

「分かりそう」で「分からない」でも「分かった」気になれる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

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

44
50
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?