PHP如何比较日期并自动调用服务挂起函数,无需用户登录触发
自动触发服务暂停的实现方案
你当前的SuspendServer()函数仅在用户登录页面加载时触发,要实现无人值守自动执行,按以下两步操作即可:
1 改造现有函数实现批量处理
原函数仅支持处理单个用户ID,你需要先调整函数逻辑,从数据库中查询所有符合「到期需要暂停」条件的用户ID,批量执行暂停操作,改造后的示例代码如下:
function SuspendServer() { // 先从数据库查询所有满足24小时到期条件、且未被暂停的用户ID列表 $ids = $db->query("SELECT id FROM users WHERE expire_time <= NOW() AND is_suspended = 0")->fetchAll(PDO::FETCH_COLUMN); foreach ($ids as $id) { try { $pterodactyl->users->suspend($id); // 标记用户为已暂停,避免重复执行 $db->query("UPDATE users SET is_suspended = 1 WHERE id = {$id}"); } catch (Exception $e) { // 异常可以写入日志,不打断整体执行 error_log("用户{$id}暂停失败: ".$e->getMessage()); } } } // 调用函数执行 SuspendServer();
把这段代码单独保存为独立的PHP脚本文件,比如/data/scripts/suspend_daily.php。
2 配置定时任务触发脚本
根据你部署的服务器环境选择对应方案:
- Linux系统:使用系统自带的crontab服务,编辑定时任务列表:
执行crontab -e,添加一行配置:
该配置表示每天0点自动执行一次脚本,同时把执行日志写入0 0 * * * /usr/bin/php /data/scripts/suspend_daily.php >> /var/log/suspend_log.log 2>&1/var/log/suspend_log.log方便排查。 - Windows系统:打开「任务计划程序」,新建任务:
- 触发器设置为「每天」,间隔24小时执行
- 操作选择「启动程序」,程序或脚本填PHP的绝对路径,参数填你的脚本文件绝对路径
- 云服务环境:直接使用对应云厂商的定时触发器,把暂停逻辑封装成云函数后设置触发周期为24小时即可。
注意事项
- 脚本执行权限要配置正确,确保运行脚本的用户有读取PHP配置、访问数据库和调用Pterodactyl接口的权限
- 建议先手动执行一次脚本验证逻辑正确性,再配置定时任务
- 可以根据业务需求调整crontab的执行频率,比如每小时执行一次的话把时间改成
0 * * * *即可
内容的提问来源于stack exchange,提问作者Axel Garcia
相关产品推荐
相关产品推荐

