使用crontab实现自动运行Python程序

文章目录

  • crontab
    • crontab任务表文件
    • 一些实例
  • 提交任务与查看
  • 查看日志
  • Python虚拟环境

在Python开发中,常常使用conda创建虚拟环境,编写Python程序。如果需要周期性的运行程序,当然可以自己实现,不过使用Linux系统的crontab命令可以更快捷。

crontab

Linux系统的crontab命令用来实现定时执行某些任务。

实际上,定时执行任务是由cron守护进程(crond)来处理。cron会读取一个或多个配置文件,其中包含有命令行及其调用时间。cron的配置文件称为crontab,是cron table的简写。

crond守护进程可以使用systemctl程序来检查:

  • ststemctl start crond # 启动
  • systemctl status crond # 检查
  • ststemctl stop crond # 停止

crontab命令用来实现提交定时任务与查看,其命令语法为:

crontab [-u user] file

crontab [-u user] [-l | -r | -e] [-i] [-s]

前一个命令用来提交一个定时任务,自然需要创建一个任务表。后者的主要参数为:

  • -e : 运行编辑器来设定时程表(缺省是VI)
  • -r : 删除目前的时程表
  • -l : 列出目前的时程表

crontab任务表文件

主要的工作即使编写自己的crontab任务表文件。例如自己写的脚本文件sayhello.py,希望每分钟都运行一次。那么创建一个crontab文件sayhello.cron,在文件中添加:

1	*	*	*	*  python ~/pywork/sayhello.py

crontab任务表的格式如下:

# 注释行
f1 f2 f3 f4 f5 program

其中:

  • #开始的行为注释行
  • f1表示分钟周期,范围 (0 - 59)
  • f2 表示小时周期,范围(0-23)
  • f3 表示月份中的日期,范围(1-31)
  • f4 表示月份,范围(1-12)
  • f5 表示星期中的第几天,范围(0-6)从星期日开始计数,也可使用sun,mon,tue,wed,thu,fri,sat
  • program 表示要执行的程序命令行

通过分(minute)、时(hour)、日(day)、月(month)以及星期(week)这个5个要素来设置定时。

这些周期的常见的设置方法:

  • 使用单个标量。例如指定f1为17,也就是在每小时的第17分钟开始执行;指定f2为19,也就是在晚上7点钟开始执行,其它类推;
  • 使用*表示每个周期都要执行。例如f3, f4指定为*,表示每月的每一天都要执行;
  • 使用逗号来指定多个标量。例如指定f5mon,fri,表示每周一与周五开始执行任务;
  • 使用a-b来指定某个时间段,例如指定f213-15表示要在从第13点 到15点都要执行;
  • 使用*/n来表示按照某种间隔来执行。例如指定f2*/4 表示每4小时执行一次。

一些实例

# 每月每天每小时的第30分钟运行一次sayhello.py
30 * * * * python ~/pywork/sayhello.py

# 在冬季(12,1,2)月, 每天上午8点,每隔15 分钟运行sayhello.py
* /15 8 *  1,2,12 * python ~/pywork/sayhello.py

# 工作日每天晚上11点给老板汇报
0 11 * * mon,tue,wed,thu,fri  mail -s "hi" boss@company.com < /tmp/maildata

提交任务与查看

任务表文件编写完毕后,使用crontab命令提交:

crontab sayhello.cron

然后使用如下命令来查看:

crontab -l

查看日志

普通用户提交的日志,通常存放在在目录中/var/spool/cron下,需要超级用户才能查看;crontab的日志记录存放在/var/log/cron,也需要超级用户才能查看,而且不那么容易看。幸好自己通常会用logging写日志。

Python虚拟环境

在实际工作中,通常使用Python虚拟环境来运行Python脚本。要在crontab执行虚拟环境中的python脚本,只要使用Python的绝对路径就行,尽管会有些长。

你可能感兴趣的:(部署运行)