You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 * * * /usr/bin/php /data/scripts/suspend_daily.php >> /var/log/suspend_log.log 2>&1
    
    该配置表示每天0点自动执行一次脚本,同时把执行日志写入/var/log/suspend_log.log方便排查。
  • Windows系统:打开「任务计划程序」,新建任务:
    1. 触发器设置为「每天」,间隔24小时执行
    2. 操作选择「启动程序」,程序或脚本填PHP的绝对路径,参数填你的脚本文件绝对路径
  • 云服务环境:直接使用对应云厂商的定时触发器,把暂停逻辑封装成云函数后设置触发周期为24小时即可。

注意事项

  • 脚本执行权限要配置正确,确保运行脚本的用户有读取PHP配置、访问数据库和调用Pterodactyl接口的权限
  • 建议先手动执行一次脚本验证逻辑正确性,再配置定时任务
  • 可以根据业务需求调整crontab的执行频率,比如每小时执行一次的话把时间改成0 * * * *即可

内容的提问来源于stack exchange,提问作者Axel Garcia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:48:04