我有一个在 Unix 托管服务上运行的静态网站,我需要在特定日期触发事件,该日期是根据网站上的表格中写入的日期(定期更改)计算得出的。触发器将关闭电子邮件发送操作。有没有办法从网站中的脚本或托管平台触发事件?或者我需要求助于商业程序来执行此操作?(如果是,哪一个)?感谢您对此的想法。干杯,大卫
答案1
嗯,基本上你的选择(从我自己的用例来看)是:
- 用于
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
查看命令队列或从队列中删除特定作业。但它不支持上述语法的亚分钟精度。
答案2
由于我误读了这个问题,这里是另一个涉及实际日期计算的答案:
如果你可以提取日期以便命令行工具可以使用它,那么就有很多可能性,dadd
来自 dateutils例如:
$ dadd 2014-01-27 -4
2014-01-23
甚至通过 stdin:
$ 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
。
答案3
再次感谢您抽出时间回答。目前,我没有启动我在这里提到的脚本。这就是当前的问题。我使用的另一个脚本是来自提交表单的简单触发器。这并不太复杂。我想我必须继续寻找。祝一切顺利,大卫