Задание Cron для обновления строки через 5 дней - PullRequest
0 голосов
/ 19 апреля 2020

У меня проблемы с выполнением задания cron на cpanel для обновления состояния пользователя, если учетная запись была создана в течение 5 дней. Это просто не работает вообще. Когда я программирую работу cron на cpanel, она ничего не делает. Я даже протестировал его за несколько минут, но он не работает.

Вот моя таблица в базе данных:

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;


Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Если я правильно понимаю, ваш запрос sql уже работает в вашей среде, и вы sh создадите задание cron на linux для вызова вашей страницы, которое выполнено в PHP!

Если приведенный выше верный сценарий, то сначала необходимо убедиться, что скрипт sql выполняется в вашем файле cron_script. php следующим образом:

<?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);
?>  

Теперь, если вы wi sh для помещения вышеуказанного файла, скажем, в ваш домашний каталог: "/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, используя полный путь (с доменом), чтобы кроб был вызывать ваш скрипт:

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

Я протестировал вышеупомянутое, и оно работает в linux среде на centos 7. На нем запущен cPanel. Но он также должен работать в любой среде, в которой вы работаете, если ваше задание cron выполняется правильно и вызывает ваш cron_script. * Файл 1035 *.

PS: обратите внимание, что между "/usr/local/bin/php" И "/home/yourusername/path/to/cron/cron_script.php"

есть пробел
0 голосов
/ 19 апреля 2020

Создайте сценарий оболочки и используйте его для задания 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...