您的当前位置:首页正文

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

2024-12-02 来源:个人技术集锦


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

了解crond

官方文档:

(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

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

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

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

显示全文