使用crontab设置定时任务

时间:2021-12-18 07:49:32

配置文件

crontab主要的配置文件如下:

  • /etc/crontab:系统cron表
  • /etc/cron.d/*:保存由软件包安装脚本创建的cron文件的目录
  • /var/spool/cron/*:保存用户创建的cron文件的目录
  • /etc/cron.allow:权限允许文件
  • /etc/cron.deny:权限禁止文件

cron使用shell(/usr/bin/sh)从用户的HOME目录调用该命令。
cron为每个shell提供了一个默认环境:

HOME=<Users Home Dir>
LOGNAME=<Users Login ID>
PATH=/usr/bin:/usr/sbin:.
SHELL=/usr/bin/sh

如果没有设置相关的环境变量,会造成如$PATH问题导致的命令找不到。
可以在cron配置文件的顶部加上:

SHELL=/bin/bash
PATH=/usr/bin:/bin:/sbin:/usr/sbin

cron配置文件区别

cron的配置文件可在三个地方/etc/crontab/etc/cron.d//var/spool/cron/crontabs/

/var/spool/cron/crontabs/通过crontab命令来控制, 属于用户的, 所以这个命令设置了guid, 属于crontab用户组.

/etc/crontab 默认是控制/etc/cron.*, 如/etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly这些.

/etc/cron.d/目录下也是存放crontab的配置文件.

/etc/crontab/etc/cron.d/在配置定时任务时,需要指定用户是root,而/var/spool/cron/crontabs/已经是属于用户控制的, 所以不需要指定用户, 这是格式上的区别.

权限控制文件

cron.allow的一个示例如下:

root
nick
dee
sarah

如果 cron.allow 文件存在,只有在文件中出现其登录名称的用户可以使用 crontab 命令。root 用户的登录名必须出现在 cron.allow 文件中,如果这个文件存在的话。系统管理员可以明确的停止一个用户,通过使用 crontab 命令,同时在 cron.deny 文件中列出用户的登录名。如果只有 cron.deny 文件存在,任一名称没有出现在这个文件中的用户可以使用 crontab 命令。

如果以下一个条件成立,用户将不能使用 crontab 命令:

  • cron.allow 文件和 cron.deny 文件不存在(只允许 root 用户)。
  • cron.allow 文件存在,但用户的登录名未在其中列出。
  • cron.deny 文件存在,且用户登录名已在其中列出。

如果 cron.allow 和 cron.deny 文件都不存在,只有被 root 用户授权的人可以用 crontab 命令提交一个作业。

crontab命令

条目格式

minute  hour  day  month  weekday  command

各位置的取值如下:

  • minute: 表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

常用命令

// 添加任务
crontab -e
// root用户可以编辑其他用户的任务
crontab -u suraer -e

// 添加文件的任务
crontab -u suraer suraer_cron.txt

// 删除任务
crontab -r
// root用户可以删除其它用户的任务
crontab -u suraer -r

// 列出任务
crontab -l
// root用户查看其它用户的任务
crontab -u suraer -r

// 开关cron服务
service crond start
service crond stop

默认cron任务会发送执行任务邮件到用户帐号,如果不需要的话可以在任务行的最后面加上如下内容

>/dev/null 2>&1

可以将任务执行的信息输出到一个文件作为日志查看,如下示例:

10 10 * * * rm /home/ashish/tmp/* > /home/ashish/cronlogs/clean_tmp_dir.log

参考链接:
https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_71/com.ibm.aix.cmds1/crontab.htm
http://vlinux-freak.blogspot.jp/2010/12/working-with-crontab-scheduler.html