祝大家有美好的一天。我需要这样做:
- 创建一个 cron 作业(这里没问题)
- cron 执行一个 php 脚本
- 如果满足某些条件,我需要使用脚本返回的日期创建另一个 cron
我有root访问权限和一切。操作系统是centOS 5.5(甚至认为只要支持crons我认为这并不重要)
更具体地说,我需要一个 cron 来执行一个 php 脚本,该脚本在执行另一个脚本时从数据库(小时、分钟、秒)获取确切的时间。数据库可以随时更新。第一个作业每 10 分钟执行一次。
您可以简单地创建一个/etc/cron.d/generated
crontab 文件,您的脚本将在其中添加生成的条目。
file_put_contents('/etc/cron.d/generated', ' ... entry contents ...', FILE_APPEND');
正如@The MYYN 在他的评论中所建议的那样at
,如果您只想执行一次脚本,这也可能是一个很好的解决方案。在 PHP 中,您可以像这样调用它:
system(sprintf('echo %s|at %s',
escapeshellarg($command),
escapeshellarg(date('H:i d.m.y', $timestamp))
);
或者像这样:
$fd = popen(sprintf('at %s', escapeshellarg(date('H:i d.m.y', $timestamp))), 'w');
fwrite($fd, $command);
pclose($fd);
为什么不使用'at'?
如果我对您的理解正确,您正在使用 cron 脚本来检查数据库以执行一次性作业 - 执行作业的日期/时间在数据库中,如果您有新的一次性作业要执行的作业,您想安排它们,但只执行一次。
at、batch、atq、atrm 命令在 Linux 系统上操纵批处理队列以执行一次性作业。使用“at”安排作业,它运行,然后自动从“at”假脱机中删除。