美文网首页linux 的那些坑
Linux Crontab定时运行python程序

Linux Crontab定时运行python程序

作者: Ziger丶 | 来源:发表于2019-05-22 10:50 被阅读0次

    背景:工作需要,凌晨定时运行一次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 -

    相关文章

      网友评论

        本文标题:Linux Crontab定时运行python程序

        本文链接:https://www.haomeiwen.com/subject/btkyzqtx.html