Crontab里调用python脚本不成功的解决方案

crontab里经常会调用一些程序,但是很多时候调用python是不成功的,但是手动则是OK的,在看日志(/var/log/cron)的时候,却是显示正常,这种情况怎么破呢?其实主要就是这么几个地方:

1)轻易不要用if __name__ == "__main__";

很多主管都习惯让自己手下人把脚本写成模块化,然后潇洒的走一个整合,但是crontab对这个方法似乎不是很灵光,因为python运行的时候是从if __name__ == "__main__"开始执行,而上面的那些类crontab识别起来很费劲,而只能识别函数,而且本来crontab里放置就是就是一些看门狗脚本,所以尽可能写成流水帐,格式上不要过于复杂。

2)注意中英文,这一点是隐藏的坑点,有些crontab日志显示脚本执行成功,但是把结果重定向到某文件里发现其实是有编码报错的问题;

3)写绝对路径,如果是yum安装,就写/usr/bin/python,如果是自定义安装,就写全路径,脚本文件也写绝对路径;

4)有些python脚本需要涉及到数据库,但是有时候crontab找不到那个具体的数据库,这个时候就需要在python 脚本执行之前重新设定一下环境变量比如WOW_PATH,比如

5)如果以上都不好使,那就在crontab里加上source /etc/profile,如下:

source /etc/profile && python py脚本的绝对路径
时间: 2024-10-11 21:12:41

Crontab里调用python脚本不成功的解决方案的相关文章

实现crontab定时调用python脚本,以及command not found的问题

操作 1.修改 /etc/crontab文件 调用python脚本和其他sh的不同是:需要写清楚调用哪个python解释器 例如: * 12 * * * root /usr/bin/python /home/admin/test.py 需要用/usr/bin/python 全路径指定. 另外需要在此前写root 表示调用账户. 2.增加日志 使用/home/admin/test.py.log 2>&1 把错误流重定向到标准输出流 全部配置如下: * 12 * * * root /usr/bi

使用Runtime.getRuntime().exec()在java中调用python脚本

举例有一个Python脚本叫test.py,现在想要在Java里调用这个脚本.假定这个test.py里面使用了拓展的包,使得pythoninterpreter之类内嵌的编译器无法使用,那么只能采用java调用控制台进程,即 Runtime.getRuntime().exec(),来运行这个python脚本. 在windows下运行这个程序,假如是参考了一些百度来的被转载了无数遍的文章,很有可能运行结果是根本没有执行这个脚本.经过测试,在java中执行如下代码可以成功运行test.py文件: --

PHP 调用Python脚本

上次做用户反馈自动翻译,写了个python脚本,将日文的用户反馈翻译成中文,效果虽然可以,但其它不懂python的童鞋就没法使用了,所以搭了个web服务,让其他人可以通过网页访问查询.使用的是apache服务,具体环境(LAMP)搭建就不细说,主要分享php调用python脚本后台运行的处理. 1. PHP如何调用外部程序 首先要解决的问题就是php如何调用python脚本,在PHP中调用外部程序主要有两个函数,system和exec. system()原型:string system(stri

(转)java调用python脚本

这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用到第三方类库的情况. 先来说说我为什么要用java调用python代码,原因就在于python在爬虫方面提供了丰富的类库,但我本来已经有一套java操作数据库以及消息中间件的代码,这些代码用python实现的话可能需要至少一周时间,为了减少时间成本,因此我决定用java调用python脚本的方式使用

shell调用python脚本,并且向python脚本传递参数

1.shell调用python脚本,并且向python脚本传递参数: shell中: python test.py $para1 $para2 python中: import sys def main($canshu1, $canshu2) ..... main(sys.argv[1], sys.argv[2]) 2.使用shell调用python中的函数: python脚本如下: test.py: import ConfigParser config = ConfigParser.Config

java调用python脚本

常见的java调用python脚本方式 通过jython.jar提供的类库实现 (不建议使用,因为会报module没有找到的错误,总之就是很蛋疼,要设置一系列的参数) 通过Runtime.getRuntime()开启进程来执行脚本文件(建议使用,原因:简单粗暴我喜欢!!!)在这个里面注意:调用py脚本的时候,先用windows的dos界面去运行下 命令: python xxxx.py,测试,脚本可以调用,不然可能在java脚本就是调用了,但是就是失败了的情况,导致一直卡住,本人就是这样的一个情况

mac上使用crontab周期性执行python脚本

这个月买了本书<Linux系统命令及Shell脚本实践指南>, 看到了一个周期性执行任务cron.顿时产生一个想法: mac上有这种机制么? 加上自己也在15年下半年也学了点python脚本,哈哈,顿时就产生了这个想法“mac上使用crontab周期性执行python脚本”,不得不说 网络是给力的,居然还真有,顿时感觉学海无涯哇. 1. crontab -e 来编辑自定义自己的任务 关于如何定义自己的任务,我们可以参考here 2. 对python脚本进行编辑: 3. 效果就是,如下: 恩,基

linux+php+apache web调用python脚本权限问题解决方案

lamp : linux + apache + mysql + php 在上篇随笔中linux+php+apache调用python脚本时出现的问题的根本原因是:apache运行时使用的apache用户权限不够: 由此想到的解决方案是将apache改用root用户来执行,修改/etc/httpd/conf/httpd.conf,但结果是apache运行不起来,初步 判断是apache出于安全方面的考虑,不允许使用root用户运行(此判断是否正确有待验证). 具体解决方案(验证通过): 在sudo

Java调用Python脚本并获取返回值

在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在这种情况下可以采用另一种方法:使用Java的Runtime,像在命令行直接调用python脚本那样调用python程序.此时可以通过文件作为脚本参数来传递Python程序所需要的参数,并从脚本的输入输出流来获取本来该打印在控制台的结果. 先准备好一个python文件: def get_path(fi