Linux之Ubuntu中任务计划cron学习

一、用途:定期备份重要文件、执行某些计划任务。

二、cron的运行原理:

  Linux上的周期性任务通常都是由cron这个守护进程来完成的。cron随系统启动而启动,一般不需要用户干预。当cron启动时,它会读取配置文件,并把信息保存在内存中,每过一分钟,cron重新检查配置文件,并执行这一分钟内安排的任务。

三、crontab的管理:

  cron的配置文件叫做crontab。和其他服务器不一样,Ubuntu版本总共可以在3个地方找到cron的配置文件。

  1、系统的全局cron配置文件:

    (1)vi /etc/crontab

    (2)ls -l /etc/cron.d/ (此处的文件不需要管理员手动配置,主要用于应用软件设置自己的任务计划)

    (3)除此之外,可以通过命令:ls -l /etc/ | grep cron 列出与cron相关的一些日常配置文件

  2、普通用户的配置文件:

    (1)普通用户的配置文件以用户的登录名命名:/var/spool/cron/tom.cron

    (2)和系统的crontab不同,编辑用户自己的cron配置文件应该使用crontab命令。crontab命令的基本用法:

      a、crontab filename  // 将文件安装为用户的crontab文件,并替换原来的版本

      b、crontab -e  // 调用编辑器打开用户的crontab文件,在用户完成编辑后保存并提交

      c、crontab -l  // 列出用户crontab文件(如果存在的话)中的内容 

      d、crontab -r  // 删除用户自己的crontab文件

  3、管理用户的cron任务计划:

    (1)管理文件/etc/cron.allow、/etc/cron.deny的创建,如果没有这两个文件,在Ubuntu下,只有root有权限提交cronta。

    (2)root用户的crontab命令比普通用户的crontab命令多一个 -u 选项,用于指定这条命令对哪个用户生效:

        eg: $ sudo crontab -u mike mike_cron

          $ sudo crontab -u john -r  // 删除john的crontab文件

 

四、创建自己的配置文件:

  格式: 分钟 小时 日期 月份 星期几

  eg: 0 23 * * 5 [username] (command1;command2;....)

  // 每2分钟执行一次

  */2 * * * *  echo "This is a Cron Test at $(date)" >> /home/ts/t.txt

 

五、常见问题:

   在cron的实际使用过程中,你会遇到很多问题:

  1、crontab在指定的时间点没有达到你预期的结果,而你给过多次检查脚本确实没有错误,但它就是不执行,这时候谁都纠结,但机器是死的,人是活的,如果遇到这种情况则可以通过查看cron.log来排查出错原因,要想查看cron.log,你首先需要开启cron日志机制,过程是:

~$ sudo vi /etc/rsyslog.d/50-default.conf

#cron.*    /var/log/cron.log //去掉#,开启log机制

~$ sudo service rsyslog restart
~$ sudo service cron restart

  2、/var/log/cron.log:Jun  8 14:48:01 ubuntu CRON[5706]: (CRON) info (No MTA installed, discarding output)

    刚开始我也不明白它为什么会报这个错,后来明白了,答案在这里:

    

  Linux uses mail for sending notifications to the user. Most linux distributions have an mail service (including an mta) installed.
 Ubuntu not.think your webserver program created its own cronjob due the installation process for sending notifications via mail. You can install a mail service, postfix for example, to solve this problem.

这一段话的大致意思是说,crontab执行脚本时是不会直接错误的信息输出,而是会以邮件的形式发送到你的邮箱里,这时候就需要邮件服务器了,如果你没有安装邮件服务器,它就会报这个错。如果是测试,可以用下面的办法来解决:

  This happens because your cron jobs are producing output and then the cron daemon tries to email that output to you (i.e. root). If you don't need that output, the easiest way to solve this is to discard it at the crontab:

  $ sudo crontab -e

  and add ">/dev/null 2>&1" (without quotes) to every job

 

六、未完待续~

  

posted @ 2013-06-06 22:04 “清风轩” 阅读(...) 评论(...) 编辑 收藏