【问题标题】:Cron job to update row after 5 daysCron 作业在 5 天后更新行
【发布时间】:2020-08-01 21:34:34
【问题描述】:

如果帐户已创建 5 天,我很难在 cpanel 上执行 cron 作业来更新用户的状态。它根本不起作用。当我在 cpanel 上对 cron 作业进行编程时,它什么也不做。我什至用几分钟测试了它,但没有用。

这是我的数据库表:

CREATE TABLE `users_tmp` (
  `idUsers` int(11) NOT NULL,
  `ipUser` varbinary(16) NOT NULL,
  `uidUsers` longtext COLLATE utf8_unicode_ci NOT NULL,
  `emailUsers` longtext COLLATE utf8_unicode_ci NOT NULL,
  `pwdUsers` longtext COLLATE utf8_unicode_ci NOT NULL,
  `dataUser` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `stateUser` longtext COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

这是我要更新的代码(update_row.php):

<?php
require 'dbh.inc.php';


$sql = "UPDATE users_tmp SET stateUser = 'Inactive' WHERE timestamp < NOW() - INTERVAL 5 DAY;


【问题讨论】:

  • 向我们展示 cron 作业。
  • 创建帐户后,您究竟存储在哪里? dataUser 列?那你不应该在查询中使用它吗?
  • MySQL 有自己的内置Event Scheduler。对于此任务,外部调度程序的使用过多且不合逻辑。

标签: php mysql sql cron


【解决方案1】:

创建一个 shell 脚本并将其用于 cron 作业。

根本不需要php

#!/bin/bash

mysql --user=[username] --password=[password] --database=[db name] --execute="UPDATE users_tmp SET stateUser = 'Inactive' WHERE timestamp < NOW() - INTERVAL 5 DAY;"

mysql中也有事件

启用它

SET GLOBAL event_scheduler = ON;

并像这样创建一个事件:

CREATE EVENT name_of_event
ON SCHEDULE EVERY 1 DAY
STARTS '2020-04-19 00:00:00'
DO
UPDATE users_tmp SET stateUser = 'Inactive' WHERE timestamp < NOW() - INTERVAL 5 DAY;

【讨论】:

    【解决方案2】:

    如果我理解正确,您的 sql 查询已经在您的环境中运行,并且您希望在 linux 上创建一个 cron 作业来调用您用 PHP 制作的页面!

    如果上述情况正确,那么您首先需要确保在您的 cron_script.php 文件中执行 sql 脚本,如下所示:

    <?php
    require 'dbh.inc.php';    
    // Let's assume that you have an active connection to your database by now
    $sql = "UPDATE users_tmp SET stateUser = 'Inactive' WHERE timestamp < NOW() - INTERVAL 5 DAY";
    if (mysqli_query($conn, $sql)) {
        // createCronLog is an optional function that you can create and use to make a log of what has happened on your cron activity!
        createCronLog("Record updated successfully");
    } else {
        createCronLog("Error updating record: " . mysqli_error($conn));
    }
    mysqli_close($conn);
    ?>  
    

    现在,如果您希望将上述文件放入您的主目录: "/home/yourusername/path/to/cron/cron_script.php" public_html 之外的某个地方(因此它只能从您的 cron 作业中调用,而不能从 www 中调用)。

    这是您的 cron 作业命令:

    /usr/local/bin/php /home/yourusername/path/to/cron/cron_script.php
    

    这是 cron 作业命令和活动调用一次/每小时一次

    0   *   *   *   *  /usr/local/bin/php /home/yourusername/path/to/cron/cron_script.php
    

    如果您的文件具有 $_GET 或 $_POST 变量等依赖项,您可以将 cron_script.php 文件放在 public_html 文件夹中的某个位置,并使用完整路径(带域)调用您的 cron 文件,以便 crob 调用您的脚本:

    0   *   *   *   *  /usr/local/bin/php https://yourdomain.tld/path/to/cron/cron_script.php
    

    我已经测试了上述内容,它可以在运行 cPanel 的 centos 7 上的 linux 环境中使用。但它也必须适用于您的设置环境,只要您的 cron 作业正确执行并调用您的 cron_script.php 文件。

    PS: 注意"/usr/local/bin/php""/home/yourusername/path/to/cron/cron_script.php"之间有一个空格

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 2022-10-25
      • 2011-09-02
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      相关资源
      最近更新 更多