linux利用crond实现定时任务定时执行php脚本教程

linux利用crond实现定时任务定时执行php脚本教程


最近因为要给微信小程序写一个定时发送订阅消息请求,就写了如下php脚本实现定时发送。

了解crond

官方文档:
https://www.php.cn/linux-369884.html
(1).crond是一个daemon类程序,路径为/usr/sbin/crond。默认会以后台方式启动,service或systemd方式启动crond默认也是后台方式的。

(2).crondtab是管理crontab file的工具,而crontab file是定义定时任务条目的文件。

(3).crontab file存在于多处,包括系统定时任务文件/etc/crontab和/etc/cron.d/*,还有独属于各用户的任务文件/var/spool/cron/USERNAME

安装crond

yum install vixie-cron  #安装
yum install crontabs

安装vixie-cron包时显示没有这个包,两个办法:

yum update
//或者
yum search vixie-cron
#找到匹配项后再安装提示的文件(我这里是cronie.x86_64)
yum install  cronie.x86_64

crond命令

[root@xuexi ~]# systemctl start crond.service

[root@xuexi ~]# service crond start

[root@xuexi ~]# crond

使用如上的三个命令都可以打开,但是实际上系统可能会返回:

[root@jdyjy ~]#  service crond start
Redirecting to /bin/systemctl start crond.service

指定你要用
/bin/systemctl start crond.service
那你就用这个好了
你也可以无视忽略这个提示。因为不影响。

/bin/systemctl stop crond.service //停止
/bin/systemctl start crond.service //启动
/bin/systemctl restart crond.service //重启
/bin/systemctl status crond.service //查看目前crond运行状态

crond编辑任务

由于任务表存在于多处,不同的教程用的不同的任务文件,所以不要重复编辑,只要一个就好了。

crond -e:编辑定时任务文件,实际上编辑的是/var/spool/cron/*文件
#或者
nano /etc/crontab  #编辑配置文件,在最后一行添加内容

使用你喜欢的编辑器vi,vim都可以。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/local/php/bin:/usr/loc$
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
# */1  *  *  *  * root /usr/glaucoma/hello.sh >> /usr/glaucoma/sh.txt
*/1  *  *  *  * root /usr/local/bin/php /usr/glau/Dyns.php
#* * * * * root /bin/echo "the first cron entry"  >>/usr/hellotestcrond.txt

crontab 格式:

基本格式 :

分钟 小时 日 月 星期 命令

* * * * * command

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列 表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

记住几个特殊符号的含义:
”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
时间是5个
号组成,不过小的时间符会掩盖大的时间符。
关于具体时间设置可以查看以下:
https://www.php.cn/linux-369884.html
https://www.cnblogs.com/perfei/p/5520373.html

另外一个需要注意的时间段设置是,使用号导致低级别的时间覆盖高级别的时间。例如" */2 * * “,它不表示每两小时执行一次任务,而是每分钟执行一次,尽管在小时位上设置了每隔两小时,但在分钟位上设置的是每分钟,所以它仍然表示每分钟执行一次任务。同理,”/5 */2 * * *"分钟位上的设置覆盖小时位上的设置,表示每5分钟执行一次而忽略小时位的设置;"00 */2 */5 * *"表示每隔两小时的整点执行一次任务而忽略天数位的设置。

指令一定要写到它的指令路径。我们通常会直接php一个脚本,但是这里的指令和执行的文件两者都要写绝对路径。

/usr/local/bin/php /usr/glau/Dyns.php

你也可以先调试,调试的方法在官方文档中会有。
教程很多写的总有疏漏,所以建议先看官方文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值