在特定日期安排php脚本,只需在Openshift中运行一次

时间:2014-12-21 17:05:17

标签: php cron openshift

我需要开发一个Web应用程序,让我在特定日期安排任务。 我已经检查了cron jobs,看起来只是用于定期任务。另一方面,我只需要在特定日期安排单个任务而不重复。

我应该使用cron作业吗?

PD:任务是一个PHP脚本。

3 个答案:

答案 0 :(得分:1)

我过去这样做的方法是使用cron作业来安排任务,然后使用php脚本中的一些逻辑来确保它只运行一次。

因此,如果您希望脚本仅在下周一运行,则需要创建一个类似

的cron条目
1 1 * * mon /my/script/name

这将在每个星期一的1:01运行脚本,而crontab条目仍然存在。

然后,在php脚本中,检查您运行的那一天是否是您想要的那一天。如果没有,请退出剧本。

<?php
// Ensure we're on our target execution date
// Cron is set up to only run this once on Mondays, so we only
// need to check the date
if (date('Y-m-d') != '2014-12-22') {
    exit;
}

// Rest of script continues...

一旦作业运行,您可以在闲暇时返回并删除crontab条目。

答案 1 :(得分:1)

根据这个奇妙的tutorial关于Cron的openhift,我知道如何使用它。

取决于您想要达到的准确度。

例如,在.openshift/cron/minutely/certain_date.sh

#!/bin/bash
DATE=`date +%D` #MM/DD/YY
HOUR=`date +%H`
MINUTE=`date +%M`


if [ "$DATE" == "12/21/14" -a "$HOUR" == "23" -a "$MINUTE" == "15" ];then
    (
        #date >> $CUSTOM_REPO_DIR/certain_date.txt
        cd $CUSTOM_REPO_DIR ; #/usr/local/zend/bin/php
        $CUSTOM_PHP cron_certain_date.php
    )
fi

答案 2 :(得分:0)

您可以创建一个安排任务的PHP脚本,并且他每小时都会使用cron执行:

0 * * * * /the/scheduling/script

该脚本将使用一个文件来存储任务和日期:

date task
date task
...

或者,如果您希望可以在数据库中存储任务,那么管理(删除/修改/添加任务)会更加简单

每小时执行的php调度脚本将检查今天的日期是否与任何任务日期匹配,然后执行今天的相应任务(如果存在)。

如果你想添加任务,你可以选择调度脚本来接收带有GET字段的任务,或者在从命令行调用脚本时将它们作为参数接收(例如:php scheduling_script.php 2014-12- 12 /path/to/thetask.php)