php 计划任务-PHP 定时器实现每隔几秒运行一次

PHP 计时器每隔几秒运行一次。 让我们写一个简单的例子来解释这种技术。

需要说明的是:程序没有写结束判断语句,会无限循环。 当然,如果想停止,可以重新启动apache,重新启动后就失效了。 如果您想再次执行常规执行,请再次运行此代码。

上面这个简单的例子就可以说明这个原理。

所以对于里面的例子,我可以做一些改进。

执行脚本需要一个开关,可以通过导入外部文件来实现。 在 while 循环中,只需包含 switch 变量即可。 那么可以这样实现:

创建外部导入变量文件 switch.php ,内容如下:

改进后的脚本如下:

当然,我们也可以利用系统的定时来执行php脚本。 我们来看一个linux的反例。

在 Crontab 中使用 PHP 执行脚本

就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序调用PHP脚本。

每小时执行一次 myscript.php,如下所示:

# crontab -e

00 * * * * /usr/local/bin/php /home/john/myscript.php

/usr/local/bin/php 是PHP程序的路径。

1.crond简介

crond是linux下的一个守护进程,它周期性地执行某些任务或等待处理个别的风暴。 类似于windows下的计划任务。 操作系统安装时,会默认安装这个服务工具,并手动启动crond进程,crond进程每分钟会定期检测是否有任务需要执行,如果有任务需要执行,该任务将手动执行。

Linux下的任务调度分为两类,系统任务调度和用户任务调度。

系统任务调度:系统需要定期执行的工作,例如将缓存数据写入硬盘、清除日志等。/etc目录下有一个crontab文件,它是系统任务调度的配置文件。

/etc/crontab 文件包含以下行:

[root@localhost~]#cat /etc/crontab

外壳=/bin/bash

路径=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=""主页=/

#run-parts

51****rootrun-parts/etc/cron.hourly

第247章 ***rootrun-parts/etc/cron.daily

224**0 rootrun-parts/etc/cron.weekly

第4241章

[root@localhost~]#

前四行用于配置运行 crond 任务的环境变量。 第一行SHELL变量指定系统要使用的shell,这里是bash,第二行PATH变量指定系统执行命令的路径,第三行MAILTO变量指定crond任务执行信息将通过电子邮件发送给root用户。 如果MAILTO变量的值为空,则表示不会向用户发送任务执行信息。 第四行中的 HOME 变量指定执行 Main 目录时使用的命令或脚本。 第六至第九行的含义将在下一小节中详细描述。 这里不多说。

用户任务调度:用户需要定期执行的任务,例如用户数据备份、定期短信提醒等。用户可以使用crontab工具自定义自己的定时任务。 所有用户定义的 crontab 文件都存储在 /var/spool/cron 目录中。 其文件名与用户名相同。

用户权限文件:

文档:

/etc/cron.deny

阐明:

任务计划程序_php 计划任务_任务计划程序在哪里打开

该文件中列出的用户不允许使用 crontab 命令

文档:

/etc/cron.allow

阐明:

该文件中列出的用户可以使用 crontab 命令

文档:

/var/spool/cron/

阐明:

所有用户crontab文件存放的目录php 计划任务,以用户名命名

crontab文件的含义:

在用户创建的crontab文件中,每一行代表一个任务,每一行中的每个数组代表一个设置。 其格式分为六个数组。 前五段是时间设置段,第六段是要执行的命令段,格式如下:

分钟小时日月周命令

在:

分钟:分钟,可以是 0 到 59 之间的任意整数。

hour:小时,可以是0到23之间的任意整数。

day:日期,可以是1到31之间的任意整数。

Month:月份,可以是1到12之间的任意整数。

week:表示一周中的第几天,可以是0到7之间的任意整数,其中0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编译的脚本文件。

在上述每个数组中,还可以使用以下特殊字符:

星号 (*):代表所有可能的值。 例如,如果月份数组是星号,则表示在满足其他数组的阻塞条件后,每月都会执行该命令操作。

逗号 (,):可以指定以冒号分隔的值的列表范围,例如“1,2,5,7,8,9”

中线(-):可以使用整数之间的中线来表示整数范围,例如“2-6”表示“2,3,4,5,6”

正斜杠(/):可以使用正斜杠指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。 同时,正斜杠可以与星号一起使用,如*/10,如果用在分钟数组中,则表示每十分钟执行一次。

二、crond服务

安装定时任务:

yuminstall crontabs

服务操作说明:

/sbin/servicecrondstart//启动服务

/sbin/servicecrondstop//关闭服务

/sbin/servicecrondrestart //重启服务

/sbin/servicecrondreload//重新加载配置

查看crontab服务状态:

服务crond状态

手动启动crontab服务:

服务crondstart

要检查 crontab 服务是否已设置为开机启动,请执行命令:

系统

添加开机时手动启动:

chkconfig –level35 crondon

3.crontab命令解释

1、命令格式:

crontab[-uuser]文件

crontab[-uuser][-e|-l|-r]

2、命令功能:

通过crontab命令,我们可以以固定的时间间隔执行指定的系统命令或者shellscript脚本。 时间间隔的单位可以是分钟、小时、天、月、周及其任意组合。 该命令特别适合定期日志分析或数据备份。

3、命令参数:

-uuser:用于设置某个用户的crontab服务,例如“-uixdba”表示设置ixdba用户的crontab服务,该参数通常由root用户运行。

file:file是命令文件名,表示将file作为crontab的任务列表文件,加载到crontab中。 如果未在命令行上指定此文件,则 crontab 命令将接受在标准输入(键盘)上键入的命令并将其加载到 crontab 中。

-e:编辑用户的 crontab 文件的内容。 如果不指定用户,则表示编辑当前用户的crontab文件。

-l:显示用户的crontab文件的内容。 如果不指定用户,则表示显示当前用户的crontab文件的内容。

-r:从/var/spool/cron目录中删除用户的crontab文件。 如果不指定用户,则默认删除当前用户的crontab文件。

-i:删除用户的crontab文件时给出确认提示。

4、常用方法:

1)。 创建一个新的 crontab 文件

在考虑向 cron 进程提交 crontab 文件之前,首先要做的事情之一是设置环境变量 EDITOR。 cron 进程跟随它来确定使用哪个编辑器来编辑 crontab 文件。 99% 的 UNIX 和 LINUX 用户使用 vi。 如果您执行相同的操作,则可以编辑 $HOME 目录中的 .profile 文件并添加如下行:

编辑器= vi; 导出编辑器

然后保存退出。 让我们创建一个名为 cron 的文件,其中是用户名,例如 davecron。 将以下内容添加到该文件中。

#(在这里输入您自己的缩写)将日期回显到控制台

#下午 6 点到早上 6 点之间 15 分钟

0,15,30,4518-06***/bin/echo '日期'>/dev/console

保存并退出。 确保以上 5 个字段以空格分隔。

在前面的反例中,系统每隔15分钟就会向控制台输出当前时间。 如果系统崩溃或挂起,您可以一目了然地看到从上次显示的时间开始系统停止工作的时间。 有些系统中用tty1来代表控制台,可以根据实际情况对前面的反例做相应的修改。 要提交刚刚创建的 crontab 文件,您可以将此新创建的文件作为参数传递给 cron 命令:

$crontabdavecron

该文件现已提交给 cron 进程,该进程每 15 分钟运行一次。

同时,新创建的文件的副本已经放在/var/spool/cron目录中,文件名为用户名(即dave)。

2)。 列出 crontab 文件

任务计划程序在哪里打开_php 计划任务_任务计划程序

要列出 crontab 文件,请使用:

$ crontab -l

0,15,30,45,18-06***/bin/echo `日期`>dev/tty1

您会看到与之前类似的内容。 您可以使用这些技术来备份 $HOME 目录中的 crontab 文件:

$crontab -l>$HOME/mycron

这样,一旦crontab文件被误删除,可以通过上一节介绍的方法快速恢复。

3)。 编辑 crontab 文件

如果你想在crontab文件中添加、删除或编辑条目,并且EDITOR环境变量设置为vi,那么你可以使用vi来编辑crontab文件,相应的命令是:

$ crontab -e

您可以更改 crontab 文件并退出,就像使用 vi 编辑任何其他文件一样。 如果单个条目发生更改或添加新条目,cron 将在保存文件时对文件执行必要的健全性检查。 如果其中一个字段的值超出允许的范围,它会提示您。

当我们编辑 crontab 文件时,我们可能会添加新条目。 例如,添加以下一项:

#DT:删除核心文件,at3.30amon1,7,14,21,26,26daysofeachmonth

3031,7,14,21,26**/bin/find-name "core'-execrm{};

立即保存并退出。 最好在 crontab 文件中的每个条目上方添加注释,这样您就可以知道它的功能、运行时间,更重要的是,它是哪个用户的工作。

现在让我们使用上面提到的 crontab -l 命令列出其所有信息:

$ crontab -l

#(crondave安装于星期二五月413:07:431999)

#DT:每 30 分钟向控制台发送一次日期

0,15,30,4518-06*** /bin/echo `日期`>/dev/tty1

#DT:删除核心文件,at3.30amon1,7,14,21,26,26daysofeachmonth

3031,7,14,21,26**/bin/find-name "core'-execrm{};

4). 删除crontab文件

要删除 crontab 文件php 计划任务,您可以使用:

$ crontab -r

5)。 恢复丢失的 crontab 文件

如果你不小心删除了crontab文件,假设你的$HOME目录中有备份,你可以将它复制到/var/spool/cron/,其中是用户名。 如果由于权限问题无法完成复制,可以使用:

$crontab

其中 是 $HOME 目录中副本的文件名。

我建议您在 $HOME 目录中保留此文件的副本。 我也有过类似的经历,多次删除了crontab文件(因为r键在e键的左侧旁边)。 这就是为什么一些系统文档建议不要直接编辑 crontab 文件,而是编辑该文件的副本,然后重新提交新文件。

某些 crontab 变体有些奇特,因此使用 crontab 命令时要小心。 如果省略任何选项,crontab 可能会打开一个空文件,或者看起来是一个空文件。 这时,按删除键退出,不要按,否则会丢失crontab文件。

5.用例

示例1:每1分钟执行一次命令

命令:

*****命令

示例2:每小时第3分钟和第15分钟执行

命令:

3,15****命令

示例3:上午8:00到11:00的第3分钟和第15分钟执行

命令:

3,158-11***命令

示例4:每两天上午8:00到11:00的第3分钟和第15分钟执行

命令:

3,158-11*/2**命令

例5:每周一上午8:00到11:00第3分钟和第15分钟执行

命令:

3,158-11**1 命令

示例6:每晚21:30重启smb

命令:

第3021章 *** /etc/init.d/smbrestart

示例7:每月1日、10日、22日4:45重启smb

命令:

4541,10,22**/etc/init.d/smbrestart

例8:每周六、日1:10重启smb

命令:

101**6,0/etc/init.d/smbrestart

示例9:每天18:00到23:00之间每30分钟重启一次smb

命令:

0,3018-23***/etc/init.d/smbrestart

示例 10:每周六晚上 11:00 重新启动 smb

命令:

023**6 /etc/init.d/smbrestart

示例 11:每小时重新启动 smb

命令:

**/1***/etc/init.d/smbrestart

示例 12:晚上 11:00 到上午 7:00 之间,每小时重新启动 smb

命令:

*23-7/1*** /etc/init.d/smbrestart

例13:每月4号、每周一至周六11:00重启smb

命令:

第0114章

示例 14:1 月 1 日 4:00 重启 smb

命令:

041jan* /etc/init.d/smbrestart

示例 15:每小时执行 /etc/cron.hourly 目录中的脚本

命令:

01****rootrun-parts/etc/cron.hourly

阐明:

run-parts 是参数。 如果删除此参数,则可以写入要运行的脚本的名称,而不是目录名称。

4、使用注意事项

1.注意环境变量问题

有时候我们会创建一个crontab,但是这个任务手动执行很难,但是自动执行这个任务就没有问题。 这通常是由于crontab文件中没有配置环境变量导致的。

在crontab文件中定义多个调度任务时,需要注意的问题之一就是环境变量的设置,因为当我们自动执行某个任务时,它是在当前shell环境中执行的,程序可以实际上找到环境变量,而系统手动进行任务调度时,不会加载任何环境变量。 因此,任务运行所需的所有环境变量都需要在crontab文件中指定,这样系统执行任务调度时才不会出现问题。

不要假设 cron 知道所需的特殊情况,它似乎并不知道。 因此,请确保在 shell 脚本中提供所有必要的路径和环境变量,除了一些手动设置的全局变量。 所以要注意以下3点:

1)脚本中涉及到文件路径时,写全局路径;

2)当脚本执行需要使用java或其他环境变量时,通过source命令导入环境变量,如:

catstart_cbp.sh

#!/bin/sh

源/etc/profile

exportRUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

/usr/local/jboss-4.0.5/bin/run.sh-cmev&

3)当脚本自动执行没问题,但crontab不执行时。 这时候你就要大胆怀疑是环境变量惹的祸,可以尝试在crontab中直接引入环境变量来解决问题。 喜欢:

0****./etc/profile;/bin/sh/var/www/java/audit_no_count/bin/restart_audit.sh

2.注意清除系统用户的邮件日志

每个任务调度执行后,系统会将任务输出信息通过邮件发送给当前系统用户。 这样,随着时间的推移,日志信息会非常大,可能会影响系统的正常运行。 方向非常重要。

例如,您可以在crontab文件中设置以下模式来忽略日志输出:

0*/3***/usr/local/apache2/apachectlrestart>/dev/null2>&1

“/dev/null2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出。 由于标准输出已经被重定向到/dev/null,所以标准错误也会被重定向到/dev/null,这样日志输出问题就解决了。

3、系统级任务调度和用户级任务调度

系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成一些用户自定义的任务。 可以把用户级任务调度放在系统级任务调度中来完成(不推荐),但反过来不行,root用户的任务调度操作可以通过“crontab –uroot –e”来设置,或者调度任务可以直接写入/etc/crontab文件中。 需要注意的是,如果要定义一个任务来定期重新启动系统,只需将该任务放在/etc/crontab 文件中即可。 即使在root用户下创建定时重启系统的任务也是无效的。

4.其他注意事项

新创建的cronjob不会立即执行,至少需要2分钟才能执行。 如果重新启动cron,它将立即执行。

当crontab突然失败时,可以尝试/etc/init.d/crondrestart来解决问题。 或者查看日志,看看有没有作业执行/报错 tail -f /var/log/cron.

不要随意运行 crontab -r。 它从 Crontab 目录 (/var/spool/cron) 中删除用户的 Crontab 文件。 该用户的所有 crontab 都消失了。

crontab 中的 % 有特殊含义,表示换行符。 如果要使用它,则必须使用通配符%。 例如常用的日期'+%Y%m%d'在crontab中不会被执行,应替换为日期'+%Y%m%d'。