Jump to content

Как повесить выполнение sql команд на cron?

Featured Replies

Погуглил. Предлагают создать файл sql, в котором прописать команды. Например:

UPDATE db_name.ibf_core_tags SET tag_text=REPLACE(tag_text, 'tag1', 'tag2');
UPDATE db_name.ibf_core_tags SET tag_text=REPLACE(tag_text, 'tag3', 'tag4');

Как теперь прописать команду запуска в кроне? Какая команда и верен ли такой подход? Крон имеет графическую оболочку в панели ISP Manager. 

Edited by Zero108

Link to comment
https://ipbmafia.ru/topic/23529-kak-povesit-vypolnenie-sql-komand-na-cron/
Share on other sites

Подскажите, а через локальный путь как запустить такую команду? Нужно ли в самом файле прописывать атрибуты пхп ( <php и т.п.)? И что означает ключ -O-?

2 минуты назад, Zero108 сказал:

Подскажите, а через локальный путь как запустить такую команду? Нужно ли в самом файле прописывать атрибуты пхп ( <php и т.п.)? И что означает ключ -O-?

 

Цитата

Журналирование и входной файл:
  -o,  --output-file=ФАЙЛ    записывать сообщения в ФАЙЛ


Непонятно, для чего это здесь

И wget обычно скачивает файл, для просто выполнения желательно использовать curl

Выполнить локальный скрипт через крон можно так

/opt/php74/bin/php /var/www/user/data/script.php

Где /opt/php74/bin/php - ссылка на дистрибутив PHP

Достаточно ли в самом файле прописать команды sql или нужно добавить в начале и конце атрибуты пхп: <php и т.п.?

1 минуту назад, Zero108 сказал:

Достаточно ли в самом файле прописать команды sql или нужно добавить в начале и конце атрибуты пхп: <php и т.п.?

нужно полностью оформить как php код, т.е. со всеми атрибутами

Соответственно со всеми подключениями к БД

Можно попросить образец такого файла, где осталось только подставить sql команды, указанные выше? Файл будет запускаться из папки сайта на движке Invision Community.

Edited by Zero108

<?
$host = "localhost"; // ХОСТ БАЗЫ ДАННЫХ
$name = ""; // ИМЯ БАЗЫ ДАННЫХ
$user = ""; // ПОЛЬЗОВАТЕЛЬ БАЗЫ ДАННЫХ
$password = ""; // ПАРОЛЬ БАЗЫ ДАННЫХ
$connect = "mysql:dbname=$name;host=$host";
$db         = new PDO($connect, $user, $password);

$sql = "UPDATE db_name.ibf_core_tags SET tag_text=REPLACE(tag_text, 'tag1', 'tag2')";
$result = $db->query($sql);
$sql = "UPDATE db_name.ibf_core_tags SET tag_text=REPLACE(tag_text, 'tag3', 'tag4')";
$result = $db->query($sql);
?>

 

3 минуты назад, Zero108 сказал:

Файл будет запускаться из папки сайта на движке Invision Community.

Не важно из какой папки запускать файл. Главное укажите верный путь в кроне

50 минут назад, HooLIGUN сказал:

И wget обычно скачивает файл

потому после флага O и стоит дефис второй. 

50 минут назад, HooLIGUN сказал:

Выполнить локальный скрипт через крон можно так

вики арены предлагает оба варианта, значит оба варианта верны. только первый удобнее и запустить можно любой локальный и сторонний файл с любого сайта. 

Edited by by_ix

В мускуле есть свой шедулер, зачем крон мучать?

Включить события
SET GLOBAL event_scheduler=ON;

Создать событие
CREATE EVENT updateevent
    ON SCHEDULE EVERY 1 DAY
    DO 
    UPDATE table_test SET `value` = `value` + 1;

Посмотреть события
SHOW EVENTS;

Удалить событие 
DROP EVENT updateevent;

 

1 минуту назад, Desti сказал:

В мускуле есть свой шедулер

для связки нескольких бд это вариант же не подойдёт. 

3 минуты назад, by_ix сказал:

для связки нескольких бд

Это как? Не увидел такой задачи в вопросе ТС. 

4 минуты назад, Desti сказал:

Не увидел такой задачи в вопросе ТС. 

я в целом говорю. если ему потом нужно будет это, то вопрос с кроном и скриптами снова вернётся. 

Edited by by_ix

В рамках поставленной задачи шедулер мускуля вполне удобное решение. 

Мне удобнее cron, так как понятнее. А в мускуле непонятно, какой синтаксис, нужно убить кучу времени, чтобы правильно всё это добавить в маленьком черном окошечке терминала ssh.

Edited by Zero108

Тогда есть еще один способ, вызывать не php, а mysql, cделать файлик с командами и вызывать его.

#!/bin/bash

/usr/bin/mysql --user=username --password=password --database=dbname --execute="UPDATE db_name.ibf_core_tags SET tag_text=REPLACE(tag_text, 'tag1', 'tag2')"
/usr/bin/mysql --user=username --password=password --database=dbname --execute="UPDATE db_name.ibf_core_tags SET tag_text=REPLACE(tag_text, 'tag3', 'tag4')"

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.