最近因为要给微信小程序写一个定时发送订阅消息请求,就写了如下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
你也可以先调试,调试的方法在官方文档中会有。
教程很多写的总有疏漏,所以建议先看官方文档。