Linux中任务计划:

一次性:

at, batch

周期性:

vixie cron: crontab


一次性任务执行:

at now+3min

at 11:30

noon, midnight, teatime


at TIME

at>

Ctrl+d: 提交任务


at -l = atq


执行结果以邮件方式发送给任务发起者;

查看邮件:

# mail

& #

& 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