第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/的备忘单进行系统调整,这里将介绍常见的用法。

 

 

 

posted @ 2022-04-10 22:45  轻舞飞洋  阅读(45)  评论(0编辑  收藏  举报