第2单 2.3 设置一个cron定时任务
一、编程定时任务的脚本:
import argparse import sys from datetime import datetime import configparser def main(number, other_number, output): result = number * other_number print(f'[{datetime.utcnow().isoformat()}] The result is {result}', file=output) if __name__ == '__main__': parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--config', '-c', type=argparse.FileType('r'), help='config file', default='/etc/automate.ini') parser.add_argument('-o', dest='output', type=argparse.FileType('a'), help='output file', default=sys.stdout) args = parser.parse_args() if args.config: config = configparser.ConfigParser() config.read_file(args.config) # Transforming values into integers args.n1 = int(config['ARGUMENTS']['n1']) args.n2 = int(config['ARGUMENTS']['n2']) main(args.n1, args.n2, args.output)
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat /etc/automate.ini
[ARGUMENTS]
n1=5
n2=7
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python cron.py
[2022-04-10T14:27:38.149121] The result is 35
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat config.ini
[ARGUMENTS]
n1=5
n2=7
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python cron.py -o automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat automate.log
[2022-04-10T14:25:10.986988] The result is 35
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python cron.py -c config.ini -o automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat automate.log
[2022-04-10T14:25:10.986988] The result is 35
[2022-04-10T14:26:02.928402] The result is 35
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ python cron.py -c config.ini
[2022-04-10T14:28:09.156265] The result is 35
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ rm /Users/huangsiyang/projects/ch02/automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ /Users/huangsiyang/projects/.venv/bin/python /Users/huangsiyang/projects/ch02/cron.py -o /Users/huangsiyang/projects/ch02/automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ /Users/huangsiyang/projects/.venv/bin/python /Users/huangsiyang/projects/ch02/cron.py -o /Users/huangsiyang/projects/ch02/automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat /Users/huangsiyang/projects/ch02/automate.log
[2022-04-10T14:31:38.242586] The result is 35
[2022-04-10T14:31:41.181253] The result is 35
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ rm /Users/huangsiyang/projects/ch02/automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ /Users/huangsiyang/projects/.venv/bin/python /Users/huangsiyang/projects/ch02/cron.py -o /Users/huangsiyang/projects/ch02/automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ /Users/huangsiyang/projects/.venv/bin/python /Users/huangsiyang/projects/ch02/cron.py -o /Users/huangsiyang/projects/ch02/automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat /Users/huangsiyang/projects/ch02/automate.log
[2022-04-10T14:31:38.242586] The result is 35
[2022-04-10T14:31:41.181253] The result is 35
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ crontab -e
*/5 * * * * /Users/huangsiyang/projects/.venv/bin/python /Users/huangsiyang/projects/ch02/cron.py -o /Users/huangsiyang/projects/ch02/automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ crontab -l
*/5 * * * * /Users/huangsiyang/projects/.venv/bin/python /Users/huangsiyang/projects/ch02/cron.py -o /Users/huangsiyang/projects/ch02/automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ rm /Users/huangsiyang/projects/ch02/automate.log
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ date
2022年 4月10日 星期日 22时44分48秒 CST
(.venv) huangsiyangdeiMac:ch02 huangsiyang$ cat /Users/huangsiyang/projects/ch02/automate.log
[2022-04-10T14:35:01.041690] The result is 35
[2022-04-10T14:40:00.415594] The result is 35
crontab行由描述任务运行频率的一行(前6个元素)和任务组成。最初的6个元素中的每一个都表示执行时间的不同单位。它们大多数都是星号,意思是“任何值”,如下:
30 15 * * * * 代表“每天的15:30”
30 * * * * * 代表"每小时的半点"
0,30 * * * * * 代表"每小时的整点和半点"
*/30 * * * * * 代表"第半小时"
0 0 * * 1 * 代表“第周一零点整"
使用类似于https://crontab.guru/的备忘单进行系统调整,这里将介绍常见的用法。