コードを書きたい

コードが書きたかった

CentOS7でPHPをCronで実行させ、実行結果をGmailで取得する

はじめに

以前、以下のようなブログを投稿させていただきました。

jdkfx17.hatenablog.com

このプロダクトを現在、自宅に置いてあるCentOS7マシン(以下、自宅サーバー)でCronを使って定期実行させています。また、定期実行した際にツイートの実行結果をGmail経由で通知するように設定しています。

その設定を色々と調べた際に、情報がひとまとまりになっておらず、自分のしたいことを一気に設定できるようにいろいろなブログを拝見させていただきました。

それらのブログなどから得た知見を元に、この記事では自分が行った設定方法を備忘録として書いておこうと思います。

最終的に以下ようなCronの設定になっているのですが、こちらについて順々に解説していこうと思います。

#send Email address
MAILTO=example@gmail.com

#command
0 8 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php | Mail example@gmail.com
0 20 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php | Mail example@gmail.com

 

CronでPHPを実行する

CronでPHP処理を実行する前に、このプロダクトでは定期実行時に以下のコマンドを実行しています。(いつものやつです。)

php index.php

では、Cronでこのようなコマンドを打つためにはどうすればいいかというと、実行したい日時のあとに「/usr/bin/php」からPHPを呼んであげる必要があります。もしかすると、サーバーによって違いがある可能性があるのですが、「/usr/local/bin/php」からでもPHPを呼ぶことができます。その後、行いたい処理が書かれているコードの絶対パスを指定してあげる必要があります。今回は「/home/user-name/workspace/hitbot/index.php」でした。

#command
0 8 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php
0 20 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php

こうすることによって、PHPファイルを定期実行することができるようになりました。

 

 Gmailアドレスに実行結果を送信する

冒頭の記事を見ていただくとわかりやすいのですが、このbotでは実行されるたびに以下のコマンドでツイートできたかどうか分かるようにしています。

// ツイート成功時
print "tweeted\n";
// ツイート失敗時
print "tweet failed\n";

この結果を自分のメールアドレスに送信してちゃんと実行されているのか確認したいと思います。デフォルトでCentOS7ではCronで行った実行結果を「/var/spool/mail/user-name」というところに送信されるようになっています。

その設定をCronで自分のGmailアドレスに変更してあげようということです。

CentOS7のmailコマンドでGmailにメールを送信する方法は少し長くなってしまうので、こちらの記事を見て設定することをおすすめします。

qiita.com

mailコマンドが使えるようになったらCronで定期実行したいコマンドの以降に、このような記述を追記します。

#command
0 8 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php | Mail example@gmail.com
0 20 * * * /usr/bin/php /home/user-name/workspace/hitbot/index.php | Mail example@gmail.com

あとは、送信先の設定をするだけです。

Cronの設定に自分のメールアドレスを以下のように追記します。

#send Email address
MAILTO=example@gmail.com

これで定期実行した際に自分のGmailアドレスに実行結果が送信されるようになったと思います。僕の場合では、定期実行した際に「tweeted」や、「tweet failed」というメールが飛んできます。

 

最後に

分かる人からすればとても簡単な作業だと思うのですが、自宅サーバーでCronを実行したことがそんなになかったので、いろいろなブログを参考に自分なりに設定方法を書いてみました。

もし同じような作業をしようとしている方が、参考になれば幸いです。

もしなにかミスや、挙動が違った場合などがあればTwitterなどから連絡していただけると幸いです。