前文 http://tsaihsing.me/2017/262 已经写好了一个python脚本,甚至每次可以从命令行接受参数修改 收件人,标题和内容。 这一部分是关于如何将“激活python3.4环境+运行mailme.py”定时执行 因为用了Anaconda的缘故还需要激活非默认环境,网上很多使用linux 默认 python 执行脚本的教程不适用。 另外一些小细节,和手动执行也是不同的。搜了一圈还是找到了解决办法成功了。以下是记录大致要点。
1.定时任务 cron 与 一次性任务 at
这方面网上中文资料也很多,不再赘述。需要强调的是,at 会用 /bin/sh 执行脚本。下文介绍cron
2.用.sh脚本打包命令
在前一篇里我们已经做到手动实现激活+运行python程序了
这里为了方便,将这两步打包成一个.sh脚本,下次运行.sh即可
#! /bin/bash export PATH="/root/anaconda2/bin:$PATH" #否则会出现 下一步的activate命令失败的错误 . #这里的路径在shell 里运行 which activate查看 source activate py34 python /home/py2017/sendanemail.py --Message="via sh" #这里python脚本一定要写绝对路径 |
另外注意.py文件的执行权限要开放。
3.将以上脚本添加入crontab
shell 中 crontab -e
第一次可以选择编辑器。我选择了 vim basic
之后用 vim 编辑 ,写入黄色箭头这一行,之后保存退出
4.(推荐)安装sendmail服务。
从而可以接受cron失败的“邮件”
在shell 里 运行 apt-get install sendmail和apt install mailutils 之后按提示操作即可
5.一个定时执行失败的可能原因提醒:时区检查
date命令查看VPS的时间;tzselect 更改时区,按提示操作即可。
参考及推荐阅读
[1]shell脚本简介概述 http://www.92csz.com/study/linux/14.htm
[2]crontab简介概述 http://www.92csz.com/study/linux/15.htm
[3]稍具体一些的crontab介绍 http://www.blogjava.net/freeman1984/archive/2010/09/23/332715.html
[4]activate失败问题:https://stackoverflow.com/questions/45743633/running-a-bash-script-from-a-cronjob-not-working
[5]sendmail服务介绍和基本使用方法 http://www.cnblogs.com/zhanghaiyublog/p/3617386.html