写服务器程序的免不了要经常和 crontab 打交道,定时执行一些脚本什么的。大部分情况下都是 bash 的一些 shell 脚本,但 shell 我不是很熟悉,于是在很多情况下都直接写 Python 脚本来搞定它。今天写了一个操作 PostgreSQL 数据库的 Python 脚本,放到 crontab 中定时执行的时候,时间到了却没有任何反映。但是如果在命令行下直接执行的话,没有任何问题。

动态展示日志的命令:

# tail -f /var/log/cron

首先看看 crontab 的日志(/var/log/cron),日志中显示脚本定时执行了。那么一定是在 crontab 运行该脚本的时候报错。直接在 Python 脚本中从第一行开始写一个大大的 try 模块,显示一下 Exception 的内容。果然,抓到了…… 错误日志显示显示 Python 找不到 libpq.so.5 这个 PostgreSQL 的库。

原来 crontab 的运行环境和我们用 root 登录进去的环境都是不同的,需要在运行 Python 脚本前重新设定一下运行的环境变量如 LD_LIBRARY_PATH。这下比较好办了,直接写一个 shell 脚本,设置一下环境变量,再调用 Python 吧。 libpq.so.5 这个库我是装在 /usr/local/pgsql/lib 中。最后的脚本如下:

搞定,crontab 又跑得欢快起来了。

折腾了一个上午,写下来备忘。

本地测试:

要执行的python脚本:

config.py

'''

Created on Sep 14, 2012

@author: dashan.yin

'''

smtpserver='smtp.domainname.com'

smtpuser='xxx@domainname.com'

smtppass='pwd'

smtpport='25'

sendmail.py

#!usr/bin/env python

#coding: utf-8

import smtplib, config, email, sys

from email.Message import Message

def connect():

"connect to smtp server and return a smtplib.SMTP instance object"

try:

server = smtplib.SMTP(config.smtpserver, config.smtpport)

server.ehlo()

server.login(config.smtpuser, config.smtppass)

except Exception:

print Exception

print 'Error - connect failed'

else:

print "connect success!"

return server

def sendmessage(server, to, subj, content):

"using server send a email"

msg = Message()

msg['Mime-Version'] = '1.0'

msg['From'] = config.smtpuser

msg['To'] = to

msg['Subject'] = subj

msg['Date'] = email.Utils.formatdate() # curr datetime, rfc2822

msg.set_payload(content)

try:

failed = server.sendmail(config.smtpuser, to, str(msg)) # may also raise exc

except Exception , ex:

print Exception, ex

print 'Error - send failed'

else:

print "send success!"

if __name__ == "__main__":

to = "dashan.yin@domainname.com"

subj = "test"

text = u"测试python发送邮件程序"

server = connect()

sendmessage(server, to, subj, text)

shell脚本:

sendmail.sh

#!/bin/sh

/usr/local/bin/python /usr/local/sbin/sendmail.py

定时设置:

crontab -u root -e

*/1 * * * * sh /usr/local/sbin/sendmail.sh

然后这样就可以定时发邮件了。根据设置是每分钟发一封!

常见的问题:

1.sendmail.sh sendmail.py是否有可执行权限,如果没有的话执行下面命令:

chmod +x sendmail.sh/sendmail.py

2.sendmail.sh sendmail.py都要使用绝对路径。(这一点一定要注意,搞了一下午就栽在这上了)

crontab python不生效_crontab 中 python 脚本执行失败的解决方法相关推荐

  1. php的email函数发送失败,php中mail函数发送邮件失败的解决方法_php技巧

    本文实例讲述了php中mail函数发送邮件失败的解决方法.分享给大家供大家参考.具体分析如下: php中mail函数是一个自带的发邮件的函数,但是如果你真的要使用mail函数来发邮件那必须是要给你系统 ...

  2. crontab python不生效_crontab运行python不生效,但是手动执行正常的问题和解决方案...

    crontab运行python不生效,但是手动执行正常的问题和解决方案 linux默认装的是python2.7,安装了其他版本后直接执行没问题,但在crontab里执行不了,需要使用全路径. 使用 w ...

  3. Jenkins构建自动化脚本执行无界面解决方法

    场景: jenkins构建selenium自动化用例的时候,会有jenkins自带服务后台运行自动化脚本,可无界面运行IE.Chrome.Firefox. 然而运行IE浏览器时候(IE比较特殊),Je ...

  4. MYSQL修改编码为utf8无效往表中插入汉字还是失败的解决方法

    调了很久才发现核心错误所在,很坑!! 1.错误现象 Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F-' for column 'course' at ...

  5. 计算机定时关机计划任务失败,电脑无法创建任务计划怎么办|电脑中创建任务计划失败的解决方法...

    ‍ 如果我们要实现定时关机或者关机自动清理系统垃圾等功能,可以借助电脑系统中的任务计划程序来设置.首先就是要创建任务计划,刚开始的前几个步骤还可以正常完成,到最后一步就会弹出无法创建任务计划的提示.所 ...

  6. Python + selenium 安装问题,pip install selenium失败及解决方法

    最近想要是使用Python 访问下浏览器,网上关于这些东西都很多,Python 安装和 selenium 的下载就不赘述,这里简单总结一下第一次安装Python + selenium中遇到的问题. 1 ...

  7. Python cv2读取/存储图片中含中文路径失败的解决方法

    目录 一.问题 二.代码 一.问题 cv2对于中文路径的图片读取值为None,可以采用cv2.imdecode和np.fromfile来读取,以避免中文路径的问题: cv2对于中文路径的图片存储失败, ...

  8. Python:numpy库中的一些函数简介、使用方法之详细攻略

    Python:numpy库中的一些函数简介.使用方法之详细攻略 目录 numpy库中的一些函数简介.使用方法 1.np.concatenate() 1.1.函数案例 1.2.函数用法 numpy库中的 ...

  9. Python的Django框架中forms表单类的使用方法详解2

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

最新文章

  1. 为什么当今的企业都需要人工智能战略?
  2. 内部数据中心不会消失的6个原因
  3. linux什么是实时调度,Linux 实时调度 示例
  4. python学习笔记(字典)
  5. [Objective-C语言教程]结构体(17)
  6. 将字符串中的字符按Z字形排列,按行输出
  7. 深入浅出WPF之Binding的使用(一)
  8. hadoop 2.6.5 + hive 集群搭建
  9. OpenGL 入门第一课 视窗以及三角形
  10. Java并发编程之ConcurrentHashMap原理解析
  11. Django中urls参数传递
  12. snprintf的返回值代表字节数 != 实际写入字节数
  13. 安卓flash插件_安卓手机如何打开.swf文件 如何用手机播放swf文件
  14. C 语言学习笔记(一):C 语言的开发环境
  15. 苹果手机屏幕助手_同时适用于安卓和苹果的手机助手工具--Anvsoft Syncios
  16. android 系统vr,Android系统中的PowerVR成像框架
  17. html5 app 打包,手机h5网站如何快速打包做成APP?
  18. UE5学习笔记——前言
  19. 如何用一张影像动图来对比成都市2019年和2020年油菜花分布状态?
  20. python中排序从小到大_python怎么从小到大排列

热门文章

  1. TiDB v5.4.0 与 v6.0.0 的 sysbench 性能对比
  2. react为什么要废弃三个生命周期?
  3. 树泽:汽车次贷,可能正在酝酿下一次经济危机
  4. 搭建企业gitlab私有仓库全过程
  5. Python||datetime.timedelta()详解,核心是minutes与minute
  6. HarmonyOS服务开放平台全面了解
  7. 【Kotlin 协程】Flow 异步流 ⑧ ( 背压概念 | 使用缓冲处理背压问题 | 使用 flowOn 处理背压问题 | 从提高收集元素效率方向解决背压问题 )
  8. Kahan求和公式原理
  9. Hive2.1函数列表
  10. 既生Java,何生Groovy?