在 Ubuntu 上使用 ThinkPHP 实现定时任务(Crontab)可以通过以下步骤完成:
首先,确保你的 Ubuntu 系统上已经安装了 PHP 命令行接口(CLI)。你可以通过以下命令检查是否已安装:
php -v
如果未安装,可以使用以下命令进行安装:
sudo apt update
sudo apt install php-cli
在你的 ThinkPHP 项目中,创建一个新的控制器来处理定时任务。例如,创建一个名为 CrontabController
的控制器:
cd /path/to/your/thinkphp/project
mkdir -p application/controller
touch application/controller/CrontabController.php
然后,编辑 CrontabController.php
文件,添加一个用于测试的定时任务方法:
<?php
namespace app\controller;
use think\Controller;
use think\facade\Log;
class CrontabController extends Controller
{
public function index()
{
Log::write('定时任务执行于 ' . date('Y-m-d H:i:s'), 'crontab.log');
return '定时任务已执行';
}
}
为了让定时任务能够通过 URL 访问,需要在 route
目录下的路由文件中添加相应的路由。例如,编辑 application/route/route.php
:
<?php
use think\Route;
Route::get('crontab', 'CrontabController@index');
为了在 Crontab 中正确调用项目,需要获取项目的绝对路径。可以在项目根目录下创建一个包含项目路径的文件,例如 crontab.sh
:
cd /path/to/your/thinkphp/project
touch crontab.sh
chmod +x crontab.sh
然后,编辑 crontab.sh
文件,添加以下内容:
#!/bin/bash
cd /path/to/your/thinkphp/project
php think run crontab
将 /path/to/your/thinkphp/project
替换为你的实际项目路径。
使用 crontab -e
命令编辑当前用户的 Crontab 配置:
crontab -e
在打开的编辑器中,添加一行来定义定时任务的执行时间和命令。例如,每分钟执行一次:
* * * * * /path/to/your/thinkphp/project/crontab.sh >> /path/to/your/thinkphp/project/crontab.log 2>&1
确保将 /path/to/your/thinkphp/project
替换为你的实际项目路径,并将 crontab.log
替换为你希望记录日志的文件路径。
保存并退出编辑器后,可以使用以下命令查看当前的 Crontab 配置:
crontab -l
你可以通过访问以下 URL 来测试定时任务是否正常工作:
http://your_server_ip_or_domain/crontab
如果一切配置正确,你应该会看到返回的信息,并且在指定的日志文件中看到任务执行的记录。
为了确保定时任务在服务器重启后自动启动,可以使用 Supervisor 来管理 PHP CLI 进程。以下是基本步骤:
sudo apt install supervisor
创建一个新的 Supervisor 配置文件:
sudo nano /etc/supervisor/conf.d/thinkphp_crontab.conf
添加以下内容:
[program:thinkphp_crontab]
command=/usr/bin/php /path/to/your/thinkphp/project/crontab.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/thinkphp_crontab.err.log
stdout_logfile=/var/log/thinkphp_crontab.out.log
user=www-data
environment=PHPRC="/path/to/your/thinkphp/project"
将 /path/to/your/thinkphp/project
替换为你的实际项目路径,并根据需要调整用户和其他环境变量。
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start thinkphp_crontab
使用以下命令查看程序状态:
sudo supervisorctl status thinkphp_crontab
通过以上步骤,你可以在 Ubuntu 上使用 ThinkPHP 实现定时任务,并确保其在服务器重启后自动运行。