我正在尝试使用 执行一行操作at
。
基本上,我想在将来的某个时候发送短信。
这是我发送短信的命令:
php -r 'include_once("/home/eamorr/open/open.ie/www/newsite/ajax/constants.php");sendCentralSMS("08574930418","hi");'
上面的效果很好!几秒钟后我就收到了短信。
现在,我将来如何at
运行这个命令?
我试过
php -r 'include_once("/home/eamorr/open/open.ie/www/newsite/ajax/constants.php");sendCentralSMS("08574930418","hi");' | at now + 2 minutes
但这立刻就发出了我的命令!我想在2分钟后发送消息!
答案1
因为这不是at
命令的工作方式。at
通过 STDIN 接收命令。您上面所做的是运行脚本并将其输出(如果有)提供给at
.
这与您正在做的功能等效:
echo hey | at now + 1 minute
因为echo hey
只打印出“嘿”这个词,所以“嘿”这个词就是我at
在未来一分钟内执行的全部内容。您可能想要回显完整的php
命令,at
而不是自己运行它。在我的例子中:
echo "echo hey" | at now + 1 minute
编辑:
正如 @Gnouc 指出的,你的 at 规范中也有一个拼写错误。您必须说“现在”,以便它知道您要添加 1 分钟到什么时间。
答案2
您的语法有错误:
php -r 'include_once("/home/eamorr/open/open.ie/www/newsite/ajax/constants.php");sendCentralSMS("08574930418","hi");' |
at now + 2 minutes
从man at
:
You can also give times like now + count time-units, where the time-units
can be minutes, hours, days, or weeks and you can tell at to run the
job today by suffixing the time with today and to run the job tomorrow by
suffixing the time with tomorrow.
您应该将 php 命令包装在 shell 脚本中,然后执行它。
$ cat sms.sh
#!/bin/bash
/usr/bin/php -r 'include_once("/home/eamorr/open/open.ie/www/newsite/ajax/constants.php");sendCentralSMS("08574930418","hi");'
然后:
$ at -f sms.sh now + 2 minutes
答案3
如果您只关心 2 分钟后发送消息,而不管采用哪种方法,我建议使用sleep
.
( sleep 120 ; php -r 'include_once("/home/eamorr/open/open.ie/www/newsite
/ajax/constants.php");sendCentralSMS("08574930418","hi");' )