Linux中任务计划:
一次性:
at, batch
周期性:
vixie cron: crontab
一次性任务执行:
at now+3min
at 11:30
noon, midnight, teatime
at TIME
at>
Ctrl+d: 提交任务
at -l = atq
执行结果以邮件方式发送给任务发起者;
查看邮件:
& #
& q
删除尚未执行的任务:
at -d JOB_ID = atrm JOB_ID
任务队列:
多个
a
at -f /PATH/TO/AT_SCRIPT TIME
周期性任务:
vixie cron
crond: daemon
守护进程: daemon
/etc/init.d/
uptime
crond: 配置文件
crontab:
系统cron:/etc/crontab
用户cron: /var/spool/cron/USERNAME
1、运行者身份;
用户cron: 定义者
6个字段,与系统cron相比,无需指定用户身份
系统cron: 在配置文件指定
7个字段
# 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
3 4 * * * root cat /etc/fstab
通配符:
*:相应时间点的所有有效取值
,: 离散取值, 3,18,33,48 * * * * root cat /etc/fstab
/: 定义指定取值范围内的频率, 例如:*/3 * * * * root cat /etc/fstab 17 */3 * * * root cat /etc/fstab
-: 连续取值:17 8-20/3 * * * root cat /etc/fstab
3 18 * * 2,5
7 2 */2 * * root tar -Jcf /backup/etc-`date '+%F'`.tar.xz /etc/*
2,32 8-18/3 * * 1-5
2、PATH
/bin:/sbin:/usr/bin:/usr/sbin
如果是命令:使用绝对路径
如果是脚本:在脚本自行定义PATH=
3、拒收邮件
方法一:
MAILTO=‘’
方法二:
&> /dev/null
用户cron的定义:
crontab
-e
-r: 移除配置文件,会删除所有任务;
-l: 列出周期性任务
-u USERNAME
crontab -e -u hadoop
crontab, process, function, sed, awk, boot, grub, kernel
以秒单位执行任务计划:
方法1:
* * * * * /usr/bin/unison webdata
* * * * * sleep 30 && /usr/bin/unison webdata
方法2:
* * * * * for i in 0 1 2; do some_job && sleep 15; done; some_job
0: 15,
15:30
30: 45
45:
* * * * * for i in {1..5}; do some_job && sleep 10; done; some_job
注意:使用%时要加反斜线。例如:
1 2 3 * * touch ~/file_$(date +\%Y\%m\%d).txt
但使用单引号后也可以不再使用反斜线,例如:
1 2 3 * * touch ~/file_$(date '+%Y%m%d').txt
禁止在自动任务执行后发送电子邮件:
将输出结果重定向至/dev/null:
>/dev/null 2>&1 或
&> /dev/null
在文件的开始部分加入命令来关闭所有命令的邮件输出:
MAILTO=""
练习:
1、每5分钟执行一次cat /etc/inittab命令;
2、每周1,3,5执行备份/etc目录;
3、每30秒取得一次eth0网卡的报文发送量,保存至/stats/interface.txt文件中;保存格式形如:
11:30:15 33
11:30:45 76
4、每天中午12、13、14点,每5分钟查看一次当前系统挂载的所有文件系统,将信息保存至/stats/mounts.txt文件中;
5、每周末上午9点至下午18点,每30分钟取得一次当前系统的内存使用信息,并将其保存至/stats/memory.txt文件中;
1:*/5 * * * *
2: 2 3 * * 1,3,5
3: * * * * * /root/txpackets.sh; sleep 30; /root/txpackets.sh
4: */5 12-14 * * * mount >> /stats/mounts.txt
5: 2,32 9-18 * * 6,7 free >> /stats/memory.txt