接上回说。数据查询及发送邮件的python程序都已经完备。但是想要实现数据自动发送,还需要一台能够做定时任务的服务器。

很赶巧的是刚好公司更新设备,有很多旧的主机,我便申请留了一台,安装了ubuntu server,用作服务器。

为了便于管理,再加上业务部门又加了一个日报需求,考虑到后期增加新任务方便,我又重新将原来的python程序做了优化,将数据库连接和执行的统一放在一个程序。而将统计sql、收件人的内容放在另外的程序,每次有新任务,则指定数据库、sql内容、收件人即可。

linux执行定时任务可以用自带的crontab,首先需要在名下添加任务(因为我之前未添加过,所以也无需检查已有任务)

crontab -e

执行后,会自动打开当前user的定时任务设置,是一个文件,编辑工具是默认的vim。

翻到最下方,执行i之后添加需要定时的任务,定时任务的格式是这样:

说明:

* * * * * * 需执行任务(比如python /mystuff/supplierspeed.py)

- - - - - -

| | | | | |

| | | | | + 年 [optional]

| | | | +----- 星期 (0 - 7) (Sunday=0 or 7)

| | | +---------- 月份 (1 - 12)

| | +--------------- 日期 (1 - 31)

| +-------------------- 小时数 (0 - 23)

+------------------------- 分钟数 (0 - 59)

在打开的设置项添加定时运行我的两个统计&邮件通知任务

……

# For more information see the manual pages of crontab(5) and cron(8)

#

# m h dom mon dow command

# 以下为定时任务内容

0 10 * * * python /home/sunight/mystuff/gdsresourceremain.py

50 8 * * * python /home/sunight/mystuff/supplierspeed.py

添加完成后,按【ESC】键并输入:wq并回车,保存内容并退出。则设置项设置完成。

*注意这里的任务动作,一定要写“动作”比如想要执行某条python程序,一定要 python + 文件路径,因为之前忘了在前面输入“python”导致一直没有结果,绕了很多弯子。

任务设置成功,启动crontab任务(可以只记住restart,立即生效,比较快)

sudo /etc/init.d/cron restart

执行后,需验证一次密码,验证通过后返回

“[ ok ] Restarting cron (via systemctl): cron.service.”

在做完这一切后,我就开始等待任务执行的结果了。我设置了大概3分钟后进行执行,执行后预期结果是我的邮箱会收到监控数据的统计邮件。结果过了十分钟都还没有动静。我又紧张了,各种重新定时、restart完全不鸟我。暗自琢磨是不是python程序有问题,于是直接做了一次执行,结果这次马上就收到邮件了。

也没问题啊!

但是一看时间,找到问题所在了。我执行的时间大概是晚上17点左右,但是发来的邮件里显示的查询时间,是上午11点多(我统计的任务里,有特意用time获取了执行时间点以供参考)。

所以是服务器的时区问题?于是直接date -R看了下当前时间,果然,得到的结果是“Thu , 25 Jun 2019 11:23:41AM

于是上网查了下设置时区的方法:方法在此

设置妥当后,重新date验证了一下,这次对了

Thu 04 Jul 2019 18:20:18 PM CST

再次将定时设置在3分钟后,执行了cron restart,过了一会儿,收到邮件了(测试邮件已删,这是后来的记录):

查看了邮件内容各项无误,至此定时任务设置全通了。此后每天上午10点我都会收到关于我的项目数据,而运营同事也能在每天上午9点就收到商户的前一日出票效能数据。

这才是(具有)数据(处理能力的)产品的精髓啊!

[附]本地更新代码后,同步远端服务器:

scp /本地文件路径 user@IPAddress:/目标文件夹路径