Crontab定时任务入门教程,实战例子

查看了很多相关crontab定时任务的博客,觉得很有道理,但也很乱!踩了不少坑之后,下定决心写一篇平滑度过Crontab入门的博客,不当之处万望指教。

问题:

我有一个叫test4.py的Python脚本,需要定时执行,实时更新数据,需要借助Crontab命令,来调用一个.sh写好的命令行的文件,进而执行我们的test4.py文件,实现定时执行的功能。

原理框架:

我们查看Ubuntu下面的旧方法和新方法执行test4.py的Python脚本的原理上的不一样:


可以看到:旧方法直接在命令行工作而新方法把命令行下面的操作写成了.sh文件然后再利用命令行去编辑Crontab文件,再在文件里指定路径调用这个.sh,进而来跑这个Python的脚本。

基础知识:

我们需要补充一些Crontab知识:

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。

1. 命令格式

crontab [-u user] file crontab [-u user] [ -e | -l | -r ]

2. 命令参数

  • -u user:用来设定某个用户的crontab服务;
  • file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
  • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
  • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
  • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
  • -i:在删除用户的crontab文件时给确认提示。

3. crontab的文件格式

分 时 日 月 星期 要运行的命令

  • 第1列分钟0~59
  • 第2列小时0~23(0表示子夜)
  • 第3列日1~31
  • 第4列月1~12
  • 第5列星期0~7(0和7表示星期天)
  • 第6列要运行的命令

扫描二维码关注公众号,回复: 3799117 查看本文章

实例1:每1分钟执行一次myCommand

* * * * * myCommand

实例2:每小时的第3和第15分钟执行

3,15 * * * * myCommand

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * myCommand

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2  *  * myCommand

实例5:每周一上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 myCommand

实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

实战例子:

1、编辑crontab文件,命令行输入:

$ crontab -e


按自己需要,比如我需要每两分钟执行一次,在后面输入:

*/2 * * * *sh /home/sy/log_file/hello.sh2>>/home/sy/log_file/note.log

红色部分:定时;蓝色部分:需要执行的Python脚本位置;紫色部分:把错误log信息打印在文件note.log里面。

2、查看是否新建成功:

上述界面Ctrl+X退出,然后命令行输入:

$ crontab -l

可以查看自己输入的Crontab是否存在;


3、编写.sh文件


就好像自己子在命令行里面输入是一样的;

4、编写自己的test4.py文件:


可以看到:我的Python文件有很多print和最后会保存一个“temp7777.csv”的文件

5、开始执行crontab,命令行输入:

$ sudo service cron start


如果重新多次输入,会告诉你已经开启了

 

如果不成功,可以选择命令行输入:

$ sudo service cron restart


6、查看结果:

可以看到元本年空白的note.log文件多了一句错误信息:


这也说明原来.sh文件的source设置多余了;

还可以看到对应文件路径下多了我们想要的文件:


实验成功了!

7、如果希望原来的print信息也打印在note.log文件里面,可以再crontab 中进行设置:


输入改成:

*/2 * * * * sh /home/sy/log_file/hello.sh 1,2>>/home/sy/log_file/note.log

多加一部分黄色的1代表正常信息添加。


就这样:每两分钟,就有一堆121212121212传进去note.log文件

8、本机下面没有必要在.sh文件里面设置环境变量,但是对于服务器来讲——需要;

首先要查看本机所有环境变量:命令行输入:

$ env|more

选择你自己所需要的,加进去source那里,就可以了。。

猜你喜欢

转载自blog.csdn.net/Errors_In_Life/article/details/72778816