linux定时/计划任务cron

计划任务,就是规划好的会在预计的时间去执行的任务。crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。crontab 命令通常用于设置定期执行的任务,并将这些任务存储在 crontab 文件中。crond 服务会每分钟定期查看 定时任务列表去执行任务。如果想配置立即生效,可以执行/etc/init.d/cron reload命令。

0、crond计划任务相关的命令、配置

名称 类型 说明
crontab 命令 crontab命令,可以创建、编辑、删除某个用户的定时任务
/etc/crontab 文件 系统计划任务的全局配置文件,用于配置系统计划任务
/var/spool/cron/ 目录 存放以用户名命名的用户计划任务配置文件,通过crontab命令编辑
/var/log/cron 文件 存放crond服务的执行日志
/etc/cron.deny 文件 设置哪些用户不能使用crontab功能
/etc/cron.hourly/ 目录 存放每个小时执行一次的脚本
/etc/cron.daily/ 目录 存放每天执行一次的脚本
/etc/cron.monthly/ 目录 存放每月执行一次的脚本
/etc/cron.weekly/ 目录 存放每周执行一次的脚本
/etc/cron.d/ 目录 系统自动定期需要执行的任务文件

定时任务的定制支持两种方法:
  a.直接编写计划任务;
  b.使用目录的方式,放在目录里面的都会定时执行
Linux下的任务调度分为两类,系统任务调度和用户任务调度。系统任务的定制一般可以编辑/ect/crontab,用户任务一般通过crontab命令编写。

注意:
1、通过crontab命令添加某个用户的计划任务后,会在/var/spool/cron目录下生成以该用户名为名称的文件,crontab命令编辑的就是该文件。
2、crond服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用 crond服务做一些事情。用crontab命令配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。

1、查看系统是否安装了crondtab

rpm -qa|grep crontab

2、查看是否启动了crond服务

ps -ef|grep crondservice crond status

3、如何启停crond服务

  • 启动
    /etc/init.d/crond startservice crond start
  • 停止
    /etc/init.d/crond stopservice crond stop
  • 重启
    /etc/init.d/crond restart
  • 重新载入配置文件(一般设置计划任务后执行,可以立即生效,不用等系统去读配置文件)
    /etc/init.d/crond reload

4、设置crond服务开机自启动

chkconfig crond on

5、crontab命令使用说明

usage:  crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)  编辑用户计划任务
        -l      (list user's crontab)  列出用户的计划任务的详细内容
        -r      (delete user's crontab)  删除用户的计划任务(指删除该用户的所有计划任务,强烈建议使用-ir)
        -i      (prompt before deleting user's crontab) 删除用户的计划任务前进行提示
        -s      (selinux context)

示例1:编辑当前登录用户的计划任务
crontab -e
示例2:列出test用户的计划任务
crontab -u test -l

6、计划任务文件的格式

*    *    *    *    *    command
分    时     天    月    周    要执行的命令
符号 说明
表示分钟,可以是0~59之间的任意整数
表示小时,取值范围[0~23]
取值范围[1~31]
取值范围[1~12]
取值范围[0~7],0或7代表星期日
command 要执行的命令,可以是系统命令,也可以是自己编写的脚本
* 表示每的意思,例如分的位置为*,表示每分钟都要执行,表示0~59所有值
分隔符,当对应域取多个值时使用,例如分钟域的“1,3”表示每小时的1分和3分钟执行计划任务
- 表示时间范围,例如2-6表示"2,3,4,5,6"
/ 可以用来指定时间的间隔,例如“*/5”用在分钟域时表示每5分钟执行依次

示例1:每天0点0分时,执行test脚本
0 0 * * * test.sh
示例2:每3小时执行一下test脚本
* */3 * * * test.sh
示例3:周一到周五的0点0分执行test脚本
0 0 * * 1-5 test.sh

其他注意及总结

环境变量问题,例如crontab不能识别Java的环境变量
crontab执行shell时,只能识别为数不多的环境变量,普通的环境变量是无法识别的,所以在编写shell时,最好使用export重新声明变量,确保脚本执行。

posted @ 2019-06-13 14:28  21summer  阅读(892)  评论(0编辑  收藏  举报