问题
我有一个自动签到的小脚本,今天在日志里面发现,在重新初始化主机后连着几天已经都没有执行过了。
解决
经过简单的测试发现是缺少库,原来当我使用系统定时任务服务时,就不是在虚拟环境了,因此这些依赖库必须要安装在系统层。但这样不就违背了我隔离环境的初衷了么?所以还是不要在系统层安装,将定时任务的python3
改成虚拟环境的python3
所在的完整路径即可。
补充
为什么要使用系统定时任务呢?因为如果一直让脚本挂在后台运行,进程会一直占着资源,而实际上每天就是运行1秒钟的事。而Linux恰好有一个定时管理命令:crontab
。
最简单的操作是使用命令
$ crontab -e
然后系统会用默认的编辑器(如vi
)打开任务配置文件。之前在Ubuntu上用的时候这个文件里面会有一段说明教你如何写定时任务的格式。不过我在阿里云ECS上的CentOS上打开的时候遇到是一个空文件,不过这不重要。每天定时执行的任务按照格式:
m h * * * <your_cmd>
填写(m
是分钟(0~59),h
是小时(0~23),剩余的三个*
占位符依次代表“某一月的某一日期(1-31)”“月份(1-12或名称)”“周几(0-7或名称)”)即可。
下面列出几个不同需求的写法:
30 4 1,15 * 5 <your_cmd> # run at 4:30 am on the 1st and 15th of each month, plus every Friday.
00 09-18 * * * <your_cmd> # run at every hour, on the hour, from 9 A.M. (09:00) through 6 P.M. (18:00), every day
0 9,18 * * Mon <your_cmd> # run at every Monday, at 9 A.M. and 6 P.M
甚至可以设定每隔两小时执行操作,详见参考资料。