У меня есть статический веб-сайт, работающий на хостинге Unix, где мне нужно инициировать событие в определенную дату, которая рассчитывается по дате (которая регулярно меняется), записанной в таблице на сайте. Триггер отключит отправку электронной почты. Есть ли способ вызвать событие из скрипта на сайте или с хостинговой платформы? Или мне нужно обратиться к коммерческой программе, чтобы сделать это? (Если да, то какой)? Благодарен за ваши мысли по этому поводу. Ура, Дэвид
3 ответа
Поскольку я неправильно понял вопрос, вот еще один ответ, который касается фактического вычисления даты:
Если вы можете извлечь дату, чтобы ее могли использовать инструменты командной строки, есть множество возможностей, 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
.
Ну, в основном ваши варианты (из моих собственных случаев использования):
- Используйте
sleep(1)
для вещей, которые нуждаются в точности до секунды или секунды, порожденной вашим скриптом иnohup(1)
'd. - Используйте команду
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
для просмотра очереди команд или удаления определенных заданий из очереди, соответственно. Но он не поддерживает точность до минуты с синтаксисом выше.
Еще раз спасибо, что нашли время, чтобы ответить. В настоящее время я не запускаю сценарий, на который я ссылаюсь здесь. Это текущая проблема. Другой скрипт, который я использую, - это простой триггер из подзаголовочной формы. Это было не слишком сложно. Я думаю, мне придется продолжать искать. Все лучшее, Дэвид