Linux中的crond:设置周期性被执行的指令
crond与crontab密不可分,简言之,crond是crontab的一个守护进程。
crontab是一个命令,它从标准输入设备读取指令,存放于“contab文件”中,供以后读取和执行。
crond时Linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程。它与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程会每分钟定期检查是否有要执行的任务,若有,则自动执行该任务。
在系统调度任务下,/etc/crontab配置文件中的内容
crontab使用格式:crontab [ -u user ] [ file ]
crontab [ -u user ] [ -e|-l|-r|-i]
-u user:设定某个用户的crontab服务,此参数一般有root用户来运行
file:命令文件的名字,即将file作为crontab的任务列表文件并载入crontab。若没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab中
-e:编辑某个用户的crontab文件内容。若不指定,则默认为当前用户的crontab文件
-l:显示某个用户的crontab文件内容。若不指定,则默认为当前用户的crontab文件
-r:从/var/spool/cron目录中删除某个用户的crontab文件。若不指定,则默认为当前用户的crontab文件
-i:在删除用户的crontab文件时给确认提示
crontab文件的含义:用户所建立的crontab文件中,每一行代表一项任务,每行的每个字段代表一项设置。格式分为六个字段,前五个字段是时间设定段,第六段是要执行的命令段
*:代表所有可能的值
,:用逗号隔开的值指定一个列表的范围,eg:"1, 2, 5, 7, 8, 9"
-:中杠。整数之间用其表示一个整数的范围,eg:"2-6"表示"2, 3, 4, 5, 6"
/:正斜线。指定时间的间隔频率,eg:"0-23/2"表示每两小时执行一次。/与*也可一起使用,eg:"*/10"如果用在minute字段,表示每十分钟执行一次
eg:
30 3 * * 6 /webdata/bin/backup.sh 表示每周六3点30分执行/webdata/bin/backup.sh脚本操作
0 0 1,20 * * fsck/dev/sdb8 表示每月的1号和20号检查/dev/sdb8磁盘设备
使用crontab工具的注意事项:
1.环境变量
有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务没有问题,这种情况下一般是由于在crontab文件中没有配置环境变量引起的。因为我们手动执行某个任务时,是在当前的shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量,所以,需要在crontab文件中指定任务运行所需要的所有环境变量。
2.注意清理系统用户的邮件日志
每条任务调度执行完毕,系统都会讲任务输出的信息通过电子邮件的形式发送给当前系统的用户,这样日积月累。日志信息量会非常大,可能会影响系统的正常运行,所以,将每条任务进行重定向处理非常重要
3.系统级任务调度与用户级任务调度
系统级任务调度主要完成系统的一些维护操作,用户级任务调度完成用户自定义的一些任务。注意:如果要定义一个重启系统的任务,就必须将任务放在/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的