Bash玩转脚本7之说好的用crontab搞个自动任务

Posted 小杨在玩iOS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash玩转脚本7之说好的用crontab搞个自动任务相关的知识,希望对你有一定的参考价值。

一、前言


在“【Python融于生活】之我想要保存QQ邮箱富途的附件”文章末尾说到,这种拉取附件的脚本可以使用一个定时任务去做,所以今天就来使用一下crontab,使用一个定时任务去做这件事情。

传送门:
【Python融于生活】之我想要保存QQ邮箱富途的附件 :
http://blog.csdn.net/yang8456211/article/details/78449710

二、相关指令简介

这些东西简单写写,详细的可以自行Google

2.1 crontab是什么?

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。

2.2 crontab的使用

1)查看服务是否启动
sudo launchctl list | grep cron

有进程就说明是有添加到launchctl里。

2)相关指令

crontab -e 编辑当前用户的crontab定时任务
crontab -l 查看当前用户的crontab定时任务
crontab -r 删除当前用户的crontab定时任务

3)crontab 定时任务的格式

* * * * * *
第1个星号表示分钟(0-59)
第2个星号表示小时(0-23)
第3个星号表示日期(0-31)
第4个星号表示月份(0-12)
第5个星号表示星期几(0-6,0是周日,6是周六)
第6个星号表示执行的指令

三、Here we go

1)首先做一个测试,使用crontab执行一个简单的指令
使用crontab -e 打开编辑crontab,第一次的时候会有个询问是否创建对应的文件,创建即可。

在crontab中添加一条:

* * * * * 代表每分钟都会执行

然后tail一下看看文件是否写入了,看样子写入没有什么问题。

2)开始写定时任务脚本,取名为ycrontab.sh,用一个bash脚本统一管理。

#!/bin/bash
# @auth atany 347702498@qq.com
# blog : http://blog.csdn.net/yang8456211
# useage : for crontab


logFileName=.ycrontab.log
logFilePath=~/$logFileName

run_task()
    pyPath="/Users/yangguang/Just_for_fun/Python/proj/Mail/DownLoadMail.py"
    python $pyPath >> $logFilePath


echo `date "+%Y-%m-%d %H:%M:%S"`":Auto Run ycrontab start" >> ~/$logFileName

run_task

echo `date "+%Y-%m-%d %H:%M:%S"`":Auto Run ycrontab end" >> ~/$logFileName

脚本做了两件事情:

  • 写了一个run_task去跑固定的脚本,这里跑的是下载富途附件的那个脚本。
  • 在HOME下面生成了一个隐藏的日志文件,重定向相关的日志到里面去做个记录。

3)尝试用软连接的方式进行加入到crontab中。
之前写的创建软连接脚本又用上了,每次看到很久之前写的脚本还能运行心里就很欣慰。

【Bash玩转脚本1之自己的脚本安装程序】
http://blog.csdn.net/yang8456211/article/details/51020797

创建完软链接(ycrontab)之后使用crontab -e添加一条数据

等待了一下发现并没有执行,猜测是因为在crontab中不会去读取环境变量吗?那貌似只能Hard Code,虽然我很不喜欢。

4)Hard Code
添加完整的脚本路径:

10分钟执行一次,指定固定的脚本。- -

tail -f ~/.ycrontab.log看到日志已经记录下来了。

新的附件也已经下载下来了,已经下载了最近的一个11月10号的了。

ok,大功告成。
修改crontab,定在晚上十点吧

* 22 * * * sh /Users/yangguang/GitHub/Script/AtSaiShell/sys/script/ycrontab.sh

四、后续问题

1、可以使用smtp每次任务完成之后给我发个邮件通知一下。
2、为什么在定时任务里面不直接跑python的脚本呢,而是写了一个bash的管理脚本,目前看来其实多了一层用处不大,可以想想这个脚本还可以干一些什么(弹出确认提示之类的?)

杨光(atany)原创,转载请注明博主与博文链接,未经博主允许,禁止任何商业用途。
博文地址:http://blog.csdn.net/yang8456211/article/details/78515927
博客地址:http://blog.csdn.net/yang8456211
本文遵循“署名-非商业用途-保持一致”创作公用协议

以上是关于Bash玩转脚本7之说好的用crontab搞个自动任务的主要内容,如果未能解决你的问题,请参考以下文章

Bash玩转脚本2之自己的脚本管理工具

Bash玩转脚本1之自己的脚本安装程序

玩转Bash脚本:循环结构之while循环(转)

Bash玩转脚本1之自己的脚本安装程序

玩转Bash脚本:选择结构之case

Bash玩转脚本5之Windows上修改环境变量的脚本系统