万壑松风知客来,摇扇抚琴待留声
1. 简介
Linux 任务调度,这本应该是属于前面《Windows任务调度》的姊妹篇一同更新的,但介于某些原因合并后效果展现不好,所以这里只得分开来介绍。
说实话自从工作后亲身经历,才发现原来大学里面讲的很多知识真的是有用的,每次遇到这样的问题,我都会清晰的记得自己在某课本上对该知识点做了记录,但是不清楚的是如何正确去使用它,例如本文遇见的问题,我亲自回去翻了《Linux配置》这本书,里面密密麻麻的记录了很多知识包括这一点。
之所以写这篇文章有几个原因,1:很多知识其实在平常就会遇到,善于积累,如果多一点重视,以后就会少一点麻烦。2:做学问不只是做记录,得亲自实验过,例如我书本上的记录在实际场景中有缺陷。3:像前面文章一样将知识点记录下来,以后作为参考。
2. crontab
Linux 的 crontab 是用来定期执行程序的命令,在 Linux 中 crond 命令每分钟都会检查是否有需要执行的命令,如果有,便会自动执行调度。
2.1. 语法
1 | crontab [-u user] file |
参数说明:
-u user:用来设定某个用户的 crontab 服务,例如: “-u dh” ,表示设定 dh 这个用户的 crontab 服务,由于指定其它用户是需要权限的,所以一般只有 root 用户才使用该参数。
file:file 是命令文件的名字,表示将 file 做为 crontab 的任务列表文件并载入 crontab。如果在命令行中没有指定这个文件,crontab 命令将接受标准输入(键盘)上键入的命令,并将它们载入 crontab。
-e:编辑某个用户的 crontab 文件内容。不指定用户,默认使用当前用户。
-l:显示某个用户的 crontab 文件内容。不指定用户,默认使用当前用户。
-r:从 /var/spool/cron 目录中删除某个用户的 crontab 文件,不指定用户,默认使用当前用户。
2.2. 调度任务参数
具体格式如下:
1 | # 下面的字段command必须指定,其它参数可选,如不指定用*代替 |
2.3. 编辑 crontab 文件
编辑是最主要的功能,所以这里只以 -e 进行说明。
样例:每分钟执行一次任务,运行 /home/test.py
1 | # 执行crontab命令配置定时任务 |
样例:在上午 8 点到 11 点 的第 3 和第 15 分钟执行任务,运行 /home/test.py
1 | # 执行crontab命令配置定时任务 |
样例:每 5 小时执行一次任务,运行 home/test.py ,并将标准输出到 /home/log 中
1 | # 执行crontab命令配置定时任务 |
样例:每月 1 号执行任务,运行 /home/test.py,忽略正常输出信息
1 | # 执行crontab命令配置定时任务 |
样例:每周的第 3 天执行任务,运行 /home/test.py, 忽略正常输出和错误输出信息
1 | # 执行crontab命令配置定时任务 |
说明:/dev/null 代表空设备文件,重定向进去的信息就没有了,没有日志文件显示为空;标准键盘输入为
0,标准屏幕输出为1,标准错误输出为2,2>&1 表示将标准错误输出重定向到标准输出中;两者结合表示 1 > /dev/null 把标准输出和标准错误输出都重定向到空设备文件中(也就是忽略所有输出)。
3. 脚本文件
在定时任务脚本中,需要指明解释器绝对路径,否则任务不执行,两种方案:
- 脚本开头添加解释器位置,如:
#! /usr/local/python3/python3.7,crontab 中就不用再指明路径 - crontab 中指定解释器绝对路径,脚本中就不再需要指明路径
在 Linux 中我格外安装了 Python3.7 ,安装路径在 /usr/local/python3,所以上面是我的解释器路径。使用 #! /usr/bin/env python3 虽然可以正常通过 Python3 直接执行脚本,但在 crontab 中却无法正常使用 Python3,这点有待探究。
方法一:(脚本内容如下)
1 | #! /usr/local/python3/python3.7 |
方法二:
1 | $ crontab -e |
4. 总结
这是 Linux 任务调度的全部内容,经过简单描述可以大致清楚 crontab 命令配置定时任务,任务参数如何设置,以及一些注意事项,尤其是第三点的路径问题。
Linux 相比于 Windows 确实更适合用来做开发,但前提是你需要熟练掌握其各种命令及参数的使用。