zoukankan      html  css  js  c++  java
  • 关于crontab运行python脚本不生效,但是手动执行却正常的问题

    服务器上装了anaconda3(python3.6.3)以及linux原装的python2.7以及其他的python环境

    我直接在命令行输入python -V,显示如下内容:

    我现在有一个Main.py的 python文件(python3写的),打算用linux的crontab定时作业,实现每小时的整点执行一次这个程序。

    故我写了一个test_main.sh的脚本,内容如下:(假设Main.py,test_main.sh都在 /home/zhangsan/aaa/ 目录下)

         #!/usr/bin/bash

         cd  /home/zhangsan/aaa

         python Main.py

    然后crontab -e 来编辑crontab定时作业

       0 * * * *  /home/zhangsan/aaa/test_main.sh

    但是到了整点之后发现python文件并没有运行成功,然而直接/home/zhangsan/aaa/test_main.sh却可以正常运行。

    这个问题困惑了我很久,最终经过查资料得知,运行crontab定时作业里边的东西,都要写绝对路径,python环境最好也写绝对路径

    所以把test_main.sh 改成如下内容就可以了。

         #!/usr/bin/bash

         cd  /home/zhangsan/aaa

         /root/anaconda3/bin/python  Main.py

    原因分析:我认为,这也许时因为crontab运行python的时候,如果不写python的绝对路径,就默认是/usr/bin/python,而/usr/bin/python是python2.7,与我写的pyton3的代码是不兼容的,所以不会正常运行。

                     把python环境改为绝对路径之后,python环境就指定为anaconda的python3.6.3了,所以就可以正常运行了。

    总之一句话,在使用crontab时,所有的路径都写绝对路径,包括程序的运行环境!!!

  • 相关阅读:
    拦截器和过滤器区别
    sql语句查询出数据重复,取唯一数据
    bootstrap ace treeview树表
    bootstrap 时间选择器 datetime
    ajax请求后加额外的数据
    使用ajax请求,模态框调用并更改密码
    ajax get和post请求 后端接收并返回数据
    类的访问级别
    继承与组合
    类型转换函数
  • 原文地址:https://www.cnblogs.com/sunshine8/p/7809995.html
Copyright © 2011-2022 走看看