在linux上创建mysql5.7定时任务,为我的博客自动发布文章

背景

最近想给我的博客添加定时发布博客的功能,一开始想使用flask-apscheduler框架,但发现与gunicron结合有问题,多进程模式下会重复执行任务,于是想就在mysql数据库中进行定时任务自动修改要发布的文章就可以了,简单,粗暴 233333

思路

  1. 在linux上开启mysql5.7定时任务设置
  2. 创建发布文章存储过程脚本
  3. 创建定时任务

在linux开启mysql5.7定时任务设置

我服务器使用的centos(linux)系统,编辑mysql配置文件

root@os:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf

在配置文件末尾添加event_scheduler = 1

# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

event_scheduler = 1

重启mysql服务器

systemctl restart mysqld.service

编写发布文章mysql存储过程脚本

我的博客文章表中有两个字段statetimestampstate值为0代表草稿,为1代表发布,timestamp字段代表发布时间,那么发布文章的逻辑也是很简单,找到状态为草稿和时间小于当前时间的数据更新状态为1即可

代码如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `h3blog`.`p_auto_publish`()
BEGIN
    update article a set a.state=1 where a.`timestamp` < current_timestamp and a.state=0;
END

创建mysql定时任务

CREATE EVENT e_auto_publish
ON SCHEDULE EVERY 5 MINUTE
ON COMPLETION PRESERVE
DO 
CALL p_auto_publish();

我这里定义的是每5分钟执行一次发布文章的存储过程

总结

其实在开发的时候有好多的业务逻辑如果使用代码不方便是可以选择使用数据存储过程的