さきに結論。
LaravelでDBを自動更新するクーロン設定したものの、MySQLに書き込まれる時間がずれていたので、実際にいつ実行されているのかと、書き込まれる時間を修正するべくいろいろ調べた結果、Laravelのconfig/app.phpにあるtimezoneを設定することで解決しました。
Laravelでクーロン設定したけど正しい時間に動いているのかどうか不安
Laravelは自分でコマンドをつくりKernel.phpのscheduleに書き込むことで指定した時間に実行することができます。
毎日、DBを更新するために、
app/Console/Commands/UpdateCommande.php
というコマンドファイルをつくり、
app/Console/Kernel.php
に下記のように毎日実行される処理を書きました。
$schedule->command('command:update')->daily();
これ、MySQLのテーブルでcreated_atをみると0:00になっているのですが、なんとなくずれている感じです。
コマンドラインから
$date
とやると、CentOS7の方の時間はちゃんとJSTで正しい時間が表示されます。
この時間がずれるのは、MySQLの問題なのかどうかと悩み友人に相談したところ、
「それ、phpの時間じゃね?」
ということでした。
ぐぐってみると、php.iniでphpのタイムゾーンが設定できるということで、
まずはphp.iniの場所を確認
$php --ini
↑ -は2つ
これで、php.iniファイルの場所がわかるので、
$sudo vim /etc/php.ini
これで、php.iniファイルが編集できます。
date.timezone = "Asia/Tokyo"
これで、timezoneの設定が完了。
app/Console/Kernel.php
で、どんな時間で書き込まれるか確認するため、everyFiveMinutesにしてみます。
$schedule->command('command:update')->everyFiveMintues();
5分経ったはずなので、phpMyAdminからMySQLをチェックしたところ、まだ反映されていません。
もしかして、何か間違えたかも?と思い、
Storage/logs/laravel.log
をチェックしたところ、
[2018-05-10 09:23:01] local.ERROR: Method everyFiveMintues does not exist
なんかエラーがでています。
よくみてみると
誤り : everyFiveMintues();
正解 : everyFiveMinutes();
単純にタイプミスしていました。
今度は大丈夫だろうとおもい、phpMyAdminからMySQLをチェックしたところ、
残念ながら、タイムゾーンは変わっていません。
調べると、php.iniを反映させるにはapacheを再起動する必要がるので、
$sudo reboot
してみます。
再度、確認。でも、反映されていません。
しょうがないので、phpinfo()を表示させてみます。
不思議なことに、date.timezoneはphp.iniの設定が反映されているのに、Default timezoneはUTCのままです。
なぜ?
もしかしたら、Laravelのせい?
とおもってぐぐったら、以下の記事を発見。
LaravelのtimezoneをJST(日本標準時)へ変更する – Qiita
まさにドンピシャ。
Config/app.php
にて、
'timezone' => 'UTC',
これがデフォルトの状態。これをAsia/Tokyoになおします。
'timezone' => 'Asia/Tokyo',
これで、再度、phpinfo();をみてみると
おお!無事に変更された!!!
ちなみに、先程のqiitaにて、php artisan tinkerからtimezoneを確認する方法も記述されていました。
これで多分大丈夫でしょう!