定时任务是一种可以指定具体执行时间,并在达到指定时间后手动执行的任务redhat linux,可以重复并手动化的操作,大大提高我们的工作效率。如手动化工具,常常须要使用定时功能,下边列出几种常见的须要用到定时任务的场景:
1.每晚定期拷贝备份文件的操作,可以写成一个bat文件,并添加到定时任务;
2.每10分钟动态抓取某甲网站的数据为自己所用;
3.量化交易工具,定时搜集市场动态,或则每晚开盘前搜集并剖析前一晚的财经要闻;
4.网站日志数据定期剖析和清除;
实际上,我们日常生活工作中都大量的在重复执行着个别事情,而好多那些事情都可以被设置为定时任务来执行。下边我从Linux和Windows两个方面来说明一下怎样执行一个定时任务。
这儿我假定一个场景,我编撰一个简单的插入排序算法,把排序结果输出到文件中,但是加上一个时间戳以表示执行程序的时间,借此来查看程序是否定时被执行了:
# 用python写一个插入排序算法
def insert_sort(alist):
n = len(alist)
for j in range(1, n):
for i in range(j, 0, -1):
if alist[i] < alist[i-1]:
alist[i], alist[i-1] = alist[i-1], alist[i]
else:
break
import time
if __name__ == '__main__':
alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
insert_sort(alist)
print(alist)
baconFile = open('/home/storage/zj/bacon.txt','w') # 如果是Windows则需要改成windows的路径格式
baconFile.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())+'--->'+str(alist))
baconFile.write('n')
baconFile.close()
在Linux下假如要使用定时任务,我们要用到一个称作crontab的工具,首先须要安装一下,在Ubuntu环境下安装如下所示:
安装:apt-get install cron
启动:service cron start
重启:service cron restart
停止:service cron stop
检查状态:service cron status
查询cron可用的命令:service cron
检查Cronta工具是否安装:crontab -l
在CentOS环境下安装:
yum install vixie-cron
yum install crontabs
安装完成并启动服务后,可以查看cron服务是否正常启动:
可以看见我的cron早已正常启动了。
使用crontab-l命令可以查看当前的定时任务。
可以听到,我目前有两个定时任务linux 启动定时任务,一个是每晚8点把一句话输出到data.txt中,另一个定时任务是每隔10分钟执行我里面编撰的python代码。
使用命令crontab-e可以进行编辑定时任务。依据系统默认编辑器不同,可能会使用vim编辑器linux 启动定时任务,也可能使用其他的编辑器,如我这儿就是GUNnano。
crontab编辑的句型可以参考下表:
(1)语 法:
crontab [-u ][配置文件] 或 crontab { -l | -r | -e }
-u #<用户名称> 是指设定指定<用户名称>的定时任务,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的定时任务。
-l #列出该用户的定时任务设置。
-r #删除该用户的定时任务设置。
-e #编辑该用户的定时任务设置。
(2)命令时间格式 :
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
(3)一些Crontab定时任务例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart #每晚的21:30 重启apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart #每月1、10、22日的4 : 45重启apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart #每周六、周日的1 : 10重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart #每天18 : 00至23 : 00之间每隔30分钟重启apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart #每星期六的11 : 00 pm重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart #晚上11点到早上7点之间,每隔一小时重启apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart #每一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart #每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart #一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate cn.pool.ntp.org #每半小时同步一下时间
0 */2 * * * /sbin/service httpd restart #每两个小时重启一次apache
50 7 * * * /sbin/service sshd start #每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop #每天22:50关闭ssh服务
0 0 1,15 * * fsck /home #每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup #每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} ; #每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls #每月的1、11、21、31日的6:30执行一次ls命令
下边来看一下我之前的编撰的程序是否又被正确执行。根据我编撰的定时任务,应当每10分钟执行一遍我的python文件,也即是把排序结果输出到bacon.txt中。
可以看见,确实每隔十分钟执行了我的代码,也就是实现了定时任务的执行。
下边再来看一下Windows环境下,该怎么实现定时任务,在Windows下就便捷多了,一共有两种形式:
图象界面操作
Schtasks命令行操作
我们这儿主要来讲解一下图形界面的操作方法,虽然图形界面是windows的特色嘛。
首先linux系统怎么样,在开始菜单栏搜索"任务计划程序",打开“任务计划程序”主界面。
当我们要创建一个定时任务的时侯,可以在左边面板点击“创建任务”。
打开创建任务面板,输入任务名称。
选择“触发器”,编撰触发定时任务的条件。
点击“新建”,新建一个触发器。
在这儿我们可以设定任务的触发时间以及任务执行的间隔。新建完成后,在触发器列表中可以见到新建的触发器。我这儿创建了一个从2023年4月20日14:10开始,每隔5分钟执行一次的触发器,而且每天都执行。
接出来,点击“操作”选项卡,设定我们的操作。
点击“新建”,新建一个操作。注意这儿的程序须要给出完整路径,我那边让他指向我python.exe的安装目录,参数就是我须要执行的Python文件的地址。
点击确定后,可以看见定时任务创建成功。
下边我们来观察,是否每隔5分钟会执行一次程序。
可见,程序确实每隔5分钟执行了一次。至此我们就完成了在Windows环境下添加定时任务的功能了。