PHP の無限ループは、スケジュールされたタスクの処理において非常に非効率的です。これを実現するには、Linux の組み込みのスケジュールされたタスクの crontab コマンドを使用して php スクリプトを呼び出すことを誰もが推奨しています。この記事では主に、PHP と Linux cron コマンドを組み合わせてスケジュールされたタスクを実装する例を紹介します。
PHP スケジュールされたタスクの 2 つの方法:
1. Web 経由で PHP Web ページを呼び出しますが、これにはセキュリティの問題があり、外部ユーザーも同時にこのファイルを呼び出すことができます。
*/1 * * * * /usr/bin/wget -q -O temp.txt http://wan.coolxap.cn/cron
2. php-cli モードを使用して php スクリプトを呼び出します。cli は php スクリプトを実行するコマンドライン モードです
* * * * * /usr/bin/php -f /root/test.php >> test.log
/var/spool/cron にタスクを追加するには crontab -e を使用します。ルートファイルを見ることができます。
変更を有効にするためにサービスを再起動してください
service crond restart
crontab の最も細かい粒度は分ですが、複数のタスクを開始してスリープして数秒でタスクをシミュレートすることができます。
* * * * * /bin/date >> /tmp/date.txt * * * * * sleep 10; /bin/date >> /tmp/date.txt * * * * * sleep 20; /bin/date >> /tmp/date.txt * * * * * sleep 30; /bin/date >> /tmp/date.txt * * * * * sleep 40; /bin/date >> /tmp/date.txt * * * * * sleep 50; /bin/date >> /tmp/date.txt列举个真实场景:
*/1 * * * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/closeinvalidlive 0 0 27 * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/magicdistributed 0 0 26 * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/guildassessment 0 0 27 * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/guildprizestatement
スケジュールされたタスクが機能しない場合
スケジュールされたタスクは内部のphpスクリプトを実行します。
PHP スクリプトを実行するには、www ユーザーに切り替える必要があることがわかります。
それ以外の場合、スクリプトによって実行される操作 (たとえば、ファイル ディレクトリの作成や画像のダウンロードなど) が実行されます。 root ユーザーグループに。
直接的な問題は、権限が不十分なために Web ページのユーザーがディレクトリを操作できないことです。たとえば、root によって作成されたディレクトリでは、Web ユーザーはこのディレクトリに画像をアップロードできません。
解決策は次のとおりです:
wwwユーザーに切り替えてコマンドを実行します
su www "-c cd /alidata/www/wwwroot/17xap/e/caidiscuz/ && /aliyun/webserver/php5.2.17/bin/php pushnews2.php -9 -u"
さらに、画像をダウンロードするときに見つかった問題を解決するためのちょっとしたトリックがあります。
インターフェイスを使用して特定のphpファイルにアクセスすると、権限が不十分でディレクトリに画像を保存できないというメッセージが表示され、画像のダウンロードに失敗することがわかりました。
次に、ディレクトリの権限が wr-wr-wr 0666 であることを確認します。これは、理論的にはディレクトリの読み取りと書き込みをサポートしています。しかし、なぜ画像をダウンロードできないのでしょうか?
x 権限がないと、このディレクトリ内で mkdir、ls などのコマンドを実行できないためです。画像を作成するには、w 権限だけでなく x 権限も必要です。
権限をwrx-r-xr-x 0755に変更すると、正常に画像がダウンロードできるようになりました。
問題を解決するコツは、まず十分な 0777 権限を与えることです。問題が解決し、ディレクトリの権限が不足しているためにスクリプトが正常に実行できないと判断された場合は、ディレクトリの権限を取り戻し、徐々に権限を増やしていきます。 。
以上がPHP は Linux の cron コマンドを組み合わせてスケジュールされたタスクの例を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。