У меня есть статический веб-сайт, работающий на хостинге Unix, где мне нужно инициировать событие в определенную дату, которая рассчитывается по дате (которая регулярно меняется), записанной в таблице на сайте. Триггер отключит отправку электронной почты. Есть ли способ вызвать событие из скрипта на сайте или с хостинговой платформы? Или мне нужно обратиться к коммерческой программе, чтобы сделать это? (Если да, то какой)? Благодарен за ваши мысли по этому поводу. Ура, Дэвид

3 ответа3

0

Поскольку я неправильно понял вопрос, вот еще один ответ, который касается фактического вычисления даты:

Если вы можете извлечь дату, чтобы ее могли использовать инструменты командной строки, есть множество возможностей, dadd , папа из dateutils :

$ dadd 2014-01-27 -4
2014-01-23

Или даже через стандартный ввод:

$ echo 2014-01-27 | dadd -4
2014-01-23

Если под таблицей вы подразумеваете таблицу sql, вы можете использовать арифметику даты вашей системы баз данных, например, в mysql:

SELECT DATE_ADD(STR_TO_DATE("2014-01-27", "%Y-%m-%d"), INTERVAL -4 DAY);
+------------------------------------------------------------------+
| DATE_ADD(STR_TO_DATE("2014-01-27", "%Y-%m-%d"), INTERVAL -4 DAY) |
+------------------------------------------------------------------+
| 2014-01-23                                                       |
+------------------------------------------------------------------+

который также может быть запущен из командной строки для передачи значения инструментам, подобным at .

0

Ну, в основном ваши варианты (из моих собственных случаев использования):

  1. Используйте sleep(1) для вещей, которые нуждаются в точности до секунды или секунды, порожденной вашим скриптом и nohup(1) 'd.
  2. Используйте команду at(1) чтобы запланировать выполнение с помощью at-daemon (требуется работающий atd)

Вариант 1 может использовать относительное время и работает на любом Unix, это sleep-script.sh:

#!/bin/sh

sleep "$@"
## dostuff
echo "DONE"

тогда из вашего скрипта:

...
nohup sleep-script.sh 1m 19s &
...

Варианту 2 нужен запущенный atd (и он поддерживает абсолютное время), в вашем сценарии вы должны добавить:

...
at 09:45 tomorrow <<EOF
## stuff i need done
echo "DONE"
EOF
...

Вариант 2 более удобен, поскольку вы можете использовать atq и atrm для просмотра очереди команд или удаления определенных заданий из очереди, соответственно. Но он не поддерживает точность до минуты с синтаксисом выше.

0

Еще раз спасибо, что нашли время, чтобы ответить. В настоящее время я не запускаю сценарий, на который я ссылаюсь здесь. Это текущая проблема. Другой скрипт, который я использую, - это простой триггер из подзаголовочной формы. Это было не слишком сложно. Я думаю, мне придется продолжать искать. Все лучшее, Дэвид

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .