Ubuntu下crontab定时任务详细总结

1、定义:

cron是服务名称,crond是后台进程,cron的配置文件称为“crontab”,是“cron table”的简写,crontab是定制好的计划任务表。
cron服务提供crontab命令来设定cron服务的。

2、安装:

安装:apt-get install cron
一般情况下ubuntu自带cron服务

3、crond服务操作命令

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
service cron status //检查状态
service cron //查询cron可用的命令
查看服务是否已经启动 ps -ax | grep cron

4、crontab命令

crontab -u //设定某个用户的cron服务                     -u指定一个用户
crontab -l //列出某个用户cron服务的详细内容              -l列出某个用户的任务计划
crontab -r //删除没个用户的cron服务                     -r删除某个用户的任务
crontab -e //编辑某个用户的cron服务                     -e编辑某个用户的任务

5、crontab任务配置基本格式

 分    小时     日     月     星期     命令
0-59   0-23   1-31   1-12    0-6    command     (取值范围,0表示周日、一般一行对应一个任务)

其中:

  • “*”代表取值范围内的数字,星号可以用来代表所有有效的值,例:分钟值中的星号意味着在满足其它制约条件后每分都执行该命令。
  • “/”代表”每”,正斜线(/)可以用来指定间隔频率,例:*/3 的值可以用在小时字段中表示每三小时运行一次任务。
  • “-”代表从某个数字到某个数字,整数间的短线(-)指定一个整数范围。例:1-3 意味着整数 1、2、3
  • “,”分开几个离散的数字,用逗号(,)隔开的一系列值指定一个列表。例:2, 4, 7 标明这3个指定的整数
    开头为井号(#)的行是注释,不会被处理。

6、添加定时任务方法

第一种编辑:键入命令:crontab -e 进行编辑cron服务 (选择vim编辑器)

* * * * * /opt/module/test.sh     #每分钟执行/opt/module下的test.sh脚本
*/5 * * * * /opt/module/test.sh   #每5分钟执行/opt/module下的test.sh脚本
30 1 10,20 * * ls                 #每月10号、20号的1:30执行ls命令
0,30 18-23 * * * reboot           #每天18 : 00至23 : 00之间每隔30分钟重启电脑
* 23-7/1 * * * date >>/log.txt    #晚上23点到早上7点之间,每隔一小时将时间打印到/log.txt文本文件中
30 5 * * * ls >/jp/test 2>&1      #每天5:30执行ls命令,并把结果输出到/jp/test文件中  
								  #注:2>&1 表示执行结果及错误信息。

· 按esc退出编辑模式进入普通模式,输入:x或:wq保存退出
键入命令:crontab -l 查看刚刚写入crontab命令

第二种编辑:直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务如: 11 2 21 10 * rm -rf /mnt/fb

第三种编辑: 注意:这操作是直接替换该用户下的crontab,而不是新增

第一步:写cron脚本文件,命名为crontest.cron。
15,30,45,59 * * * * echo "test....." >> /opt/module/test.txt  表示,每隔15分钟,执行打印一次命令 
第二步:添加定时任务。执行命令 crontab crontest.cron。 
第三步:crontab -l 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本

7、crontab定时任务没有执行的可能原因

  • 脚本的原因:大多数情况下,我们要相信科学,相信计算机,不是有鬼,就是我们的脚本的问题,这种问题导致crontab不能执行的概率占到 70%以上。因为程序执行到某一步导致crontab终止执行,我就碰到一次在迁移代码的时候将数据库连错了。导致无法访问而死在那里了。
  • 执行环境问题,当我们碰到第一情况下,一般都可以通过手动执行程序将问题扼杀在摇篮里,一般情况下高手是不应该犯第一种错误的。问题是当我们 手动执行成功而crontab不能执行的时候,笔者碰到一次就是执行环境的问题,例如相关路径的设置问题。解决方案:在代码最前面执行 source /home/user/.bash_profile
  • 系统时间不正确。这种问题最好理解,也是比较常见和隐蔽的问题,解决方案:date -s ********
  • 就是我们的脚本是否有可执行权限。必须保证执行脚本的用户有执行改文件的权限。
  • crontab 守护进程死掉了。这种情况是极少发生的,但也不排除,当我们实在是找不到其他原因的时候可以用。解决方案:重启该进程。
  • crontab -u root /var/spool/cron/root 这样root用户的crontab就生效了 service crond restart 重启下服务
  • crond没有启动
  • 脚本编码问题,脚本在window下编写,传到linux下后乱码,用vi编辑器新建新shell脚本,输入内容后保存。

8、crontab权限问题

到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下:
1、如果两个文件都不存在,则只有root用户才能使用crontab命令。
2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。
3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。
4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。

9、其它

  • /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
  • /var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个crontab文件。
  • 在linux平台上如果需要实现任务调度功能可以编写cron脚本来实现。
    以某一频率执行任务
    linux缺省会启动crond进程,crond进程不需要用户启动、关闭。
    crond进程负责读取调度任务并执行,用户只需要将相应的调度脚本写入cron的调度配置文件中。
    cron的调度文件有以下几个:
    1. crontab
    2. cron.d
    3. cron.daily
    4. cron.hourly
    5. cron.monthly
    6. cron.weekly
      如果用的任务不是以hourly monthly weekly方式执行,则可以将相应的crontab写入到crontab 或cron.d目录中。

参考链接:感谢
linux应用之crontab定时任务的设置
linux定时任务的设置
Linux下的crontab定时执行任务命令详解
crontab 详细用法 定时任务

你可能感兴趣的:(问题总结)