定期的にPHPを実行したくて、スターサーバーのCRON機能を試そうとしたんですが、なかなかうまくいきませんでした。
成功するまでにやったことをここにまとめます。
正しいソースコードを用意する
次の2点について、ソースコードを見直しましょう。
- 最初に「#!/usr/bin/php」と記載しておく
- 相対パスを使用しない
修正例
下はもともと書いていた、TwitterOAuthを利用するコードの冒頭です。
<?php
require "twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
$keys = require('keys.php');
これを次のように修正しました。
#!/usr/bin/php
<?php
$path = realpath(dirname(__FILE__));
require "${path}/twitteroauth/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
$keys = require($path.'/keys.php');
実行権限を与える
CRONで呼び出したいphpファイルのパーミッションを確認しましょう。
下の図のように、実行権限を付与しておく必要があります。
CRONを追加する
CRON設定はサーバー管理ツールで行えます。
「CRON追加」を選び、まず実行したい日時を設定しましょう。
例) 毎日 15:20 分=20 時=15 日=* 月=* 曜日=* 例) 毎週日曜日 8:00 と 8:30 分=0,30 時=8 日=* 月=* 曜日=0
「コマンド」の入力方法
「コマンド」の欄には、以下の構成で記入する必要があります。
(コマンドパス)(半角スペース)(ソースファイルの絶対パス)
まずコマンドパスですが、これは「サーバー情報」に載っているものを利用します。
任意のPHPのバージョン(CGI)を選んで、「実行パス」をコピーしておきましょう。
ソースファイルの絶対パスは、必ず下のようになります。
これはFTP等でソースファイルをアップロードする際のルートフォルダのパスです。
/home/(サーバーID)/(ドメイン)/public_html/
ちなみにサブドメイン下だとこうなります。
/home/(サーバーID)/(ドメイン)/public_html/(サブドメイン)/
(サーバーIDはサーバー管理ツールの一番上に表示されてます)
例えば一番上の階層に「cron」というフォルダを作って「sample.php」をアップロードすると、絶対パスは次のようになります。
/home/(サーバーID)/(ドメイン)/public_html/cron/sample.php
「コマンド」の例
/usr/bin/php7.3-cgi /home/(サーバーID)/(ドメイン)/public_html/cron/sample.php
まとめ
- ファイルの実行権限はつけ忘れがちなので気をつけましょう
- requireなどの参照先は全て絶対パスで記載し、動作確認をしておきましょう
- CRONの設定日時が正しいかチェックしましょう
- CRONのコマンド、とくに絶対パスが正しいかチェックしましょう
この記事へのコメントはありません。