今天写了个脚本,要写进crontab做定时任务,每5分钟跑一遍。关于crontab的介绍呢,请大家移步www.baidu.com,在这里我就不仔细介绍了。可以搜索一下“每天一个Linux命令”系列文章,介绍的比我要好很多。我这里只是介绍一下最简单的两种写法。
$ sudo vim /etc/crontab
打开crontab,里面的格式是酱婶的:
# m h dom mon dow user command
简单的说,这几个参数分别是:分钟,小时,日,月,周,用户,命令。比如我的用户是apple,如果我想每天0点执行一个test.py的python脚本,可以这样写:
0 0 * * * apple /usr/bin/python /home/apple/test.py
要注意的是,最后一个command参数中,命令和选项都需要写绝对路径。
然后,还有另一种功能,比如说我这个脚本,不是每天同一时间执行的,而是每10分钟要跑一趟,那我总不能写成
0 * * * * apple /usr/bin/python /home/apple/test.py 10 * * * * apple /usr/bin/python /home/apple/test.py 20 * * * * apple /usr/bin/python /home/apple/test.py 30 * * * * apple /usr/bin/python /home/apple/test.py 40 * * * * apple /usr/bin/python /home/apple/test.py 50 * * * * apple /usr/bin/python /home/apple/test.py
这样的吧。That's too two. too two. 兔兔。
←兔兔内心OS:关我屁事!
其实,只要这样写就好了:
*/10 * * * * apple /usr/bin/python /home/apple/test.py
其他像crontab -e什么的我也不是很了解,就不说了。
那么,这么简单的东西,问题出在什么地方捏?问题在于我的python脚本。我知道用定时任务的时候,print是没法输出东西的,所以,我特意写了个文件,假装它是一个log。结果定时每5分钟它居然木有执行。检查了好久,还单独找其他机器做实验,都木有效果。检查了好久,连/var/log/syslog中的cron的日志都翻出来了,还是没找到问题。最后,我发现,原来是文件没有写成绝对路径,不知道写到哪里去了。
果然我还是兔兔。
←兔兔内心OS:再提我打你喔!
之后,问题就解决了。
。。。。。。
其实呢,还有另一种解决方式:脚本里面根本不需要写个文件输出,直接在crontab的命令中重定向到文件就好了,像这样:
*/10 * * * * apple /usr/bin/python /home/apple/anpeng/test.py > /home/apple/anpeng/aaa.log
兔兔:。。。
我什么都没说啊!