linux 的那些坑

Linux Crontab定时运行python程序

2019-05-22  本文已影响0人  Ziger丶

背景:工作需要,凌晨定时运行一次py脚本。linux上可以直接使用crontab进行定时任务。


1、Crond命令详解

crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似


其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件

举个栗子:

#每天11.30运行脚本
30 11 * * *  /home/aaa/test_main.sh 
#每隔1分钟就运行一次脚本    
*/1 * * * *  /home/aaa/test_main.sh  
#执行Python脚本   
30 0 * * *  /home/upload/anaconda3/bin/python  /home/upload/py/test.py

2、Crond状态

首先参看 crond 状态

service crond status

如果关闭的话,就将其启动或者重启

服务操作说明
/sbin/service crond start       //启动服务
/sbin/service crond stop       //关闭服务
/sbin/service crond restart       //重启服务
/sbin/service crond reload       //重新载入配置
/sbin/service crond status       //启动服务

常用方法

crontab -l       #查看现有的所有 crontab 任务
crontab -e       #添加或修改 crontab 任务(类似与vim)

3、Crond常见错误

Ⅰ、查看反馈

我在添加任务后,反馈 You have new mail in /var/spool/mail/upload。
这是相当于Crond的日志,如果脚本没有正常运行的话,可以去直接查看日志。

Ⅱ、python相对路径报错

遇到一个很诡异的事情:直接执行python脚本或把它放到shell脚本执行没啥问题,一放到crontab里执行就无反应。
解决办法:
crontab里执行时,直接把高版本python的全路径写上去,比如:

0 * * * * /usr/local/python3.6/bin/python  home/community/test.py 

运行crontab定时作业里边的东西,都要写绝对路径,python环境最好也写绝对路径

Ⅲ、脚本其他报错

直接运行 python test.py无问题,添加绝对路径到crontab里运行无反应。
打开 /var/spool/mail/upload 发现报错
SyntaxError: Non-ASCII character '\xe5' in file ex16.py on line 1,
ng declared; see http://python.org/dev/peps/pep-0263/ for details

解决办法:
在文件头部添加这一句即可 # -- coding: utf-8 -

上一篇下一篇

猜你喜欢

热点阅读