Skip to main content

6.定时任务

Crontab定时任务

Crontab(Cron Table的缩写)是用于在Unix和类Unix操作系统上定期执行任务的工具。它允许用户在指定的时间和日期执行命令、脚本或程序。

日志文件: ll /var/log/cron* 编辑文件: vim /etc/crontab 进程:ps -ef | grep crond ==> /etc/init.d/crond restart 作用:定时备份,实时备份

常见命令参数

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)
-i (prompt before deleting user's crontab)
-s (selinux context)

定时任务分类

Linux下的任务调度分为两类,系统任务调度用户任务调度

  • 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc/crontab文件,这个就是系统任务调度的配置文件。root用户的任务调度操作可以通过 crontab –uroot –e来设置,也可以将调度任务直接写入 /etc/crontab文件。如果要定义一个定时重启系统的任务,就必须将任务放到 /etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。
  • 用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。

在crontab 文件都被保存在/var/spool/cron目录中。其文件名与用户名一致

vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
  • SHELL 和 PATH:

    • SHELL=/bin/bash: 指定用于执行crontab文件中命令的shell。
    • PATH=/sbin:/bin:/usr/sbin:/usr/bin: 设置cron任务的环境变量搜索路径。
  • MAILTO:

    • MAILTO=root: 定义cron任务的输出应该发送到的邮箱地址,这里设置为root用户的邮箱。或者使用 * * * * * command >/dev/null 2>&1 将输出重定向到空设备来禁用邮件通知。
  • 时间字段说明:

    • minute:0到59,表示每小时的哪一分钟执行任务。
    • hour:0到23,表示每天的哪一小时执行任务。
    • day:1到31,表示每月的哪一天执行任务。
    • month:1到12,表示每年的哪一月执行任务。
    • day_of_week:0到6,表示星期几(0表示星期天)执行任务。
  • 特殊字符:

    • *:代表任意值,例如,*minute字段表示每分钟都执行。
    • ,:用于分隔多个值,例如,1,15day字段表示每月的1号和15号执行任务。
    • -:用于表示范围,例如,1-5day字段表示每月1号到5号执行任务。
    • /:用于指定间隔,例如,*/10minute字段表示每隔10分钟执行任务。
  • 环境变量:

    • Crontab任务执行时的环境变量通常是有限的,所以最好使用绝对路径来指定命令和文件。
    • 注意任务的执行环境,包括路径和环境变量。没有shell或程序所需的环境变量,任务可能会不运行,一般都有/bin/bash 类似的shell,或者添加自定义环境变量。
  • 日志:

    • Crontab任务的输出和错误通常被发送到用户的邮箱,可以使用 MAILTO来指定邮箱。邮箱也可以为空。
    • 可以通过查看系统日志来获取更多有关cron任务执行的信息,通常位于 /var/log/syslog或者类似的文件中。
    • /var/log/cron * 只会记录是否执行了某些计划的脚本,但是具体执行是否正确以及脚本执行过程中的一些信息则linux会每次都发邮件到该用户下。
  • 配置文件:

    日志保存位置和级别的配置可以通过 /etc/rsyslog.conf/etc/syslog.conf 文件进行设置。可以修改这些文件以增加或减少 cron 日志的详细程度。

  • 注意事项

    • 为了防止环境问题,最好使用绝对路径。
    • 注意任务执行的频率,避免过于频繁的执行。
    • 命令的执行最好用脚本。
    • 定时任务和运行的脚本添加注释

例子:

0 * * * * command		#每小时执行一次。
0 2 * * * command #每天凌晨2点执行一次。
30 3 * * 1-5 command #每周一到周五的凌晨3点30分执行一次。
0 0 1 1 * command #每年的1月1日零点执行一次。

0 0 * * * /bin/bash /root/sa/backup/backup_system.sh #每天0点0分运行backup_system.sh服务器备份脚本
*/2 * * * * /bin/bash /usr/bin/ntpstat time.windows.com >/dev/null 2>&1 #每隔2分钟同步一次互联网时间

#添加环境变量
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh