背景介绍
crontab做定时任务是运用在linux系统中。
对于前期知道什么时候运行的任务:crontab和apscheduler都可以;
前期不知道什么时候运行的:crontab不支持。
实例用法
我看网上的教程大多是从已经会使用的角度去写的总结。我从小白的角度写一个案例。用于快速上手。
1.用于执行的task
建立一个用于执行的测试任务hello.py:
import time
def print_time():
t = time.time()
print(f'time now is:{t}')
if __name__ == "__main__":
print_time()
2.crontab -e
在任意path下输入 crontab -e
即可进入用户定时任务编辑页面:
在这里,第一次进来会要求你选择编辑方式,我选的3 vim-tiny
再次crontab -e就可以进来了,进来后,输入下面的命令
* * * * * python3 /home/Documents/test/hello.py >> /home/Documents/test/log.txt
这句话的意思是,每分钟执行一次,执行hello.py的文件,>>重定向,为输出指向log.txt(自己通过touch log.txt建立)。
写完后,esc,输入:wq保存退出。
检验成功
经过上面两步,我们就会发现
log里已经可以正常输出时间了。
notes
1.重定向
重定向要使用>>,instead of >
if you use >, log.txt will be like:
tail -f的时候报文件已截断就是因为每次都覆盖,相当于>为重写文件,>>为续写append。
2.保证你的command在单独执行的时候是正常运行的。
因为我发现我在/test/路径下直接python hello.py可以运行,但是加绝对路径时只有python3才可以正常运行。所以要保证好定时任务本身可正常执行。
3.其他log
查询定时任务执行情况可以通过:
cat /var/log/cron.log
但是我发现自己/var/log/目录下并没有cron文件,后来发现是要按照下面链接的blog修改/etc/rsyslog.d/50-default.conf中cron那行,把注释去掉。