一次性任务计划:at,batch
周期性任务计划:cron
at:简单用法
at TIME
at>
提交任务:^c+d
作业结果:以邮件形式发送系统上的当前用户
邮件收发:
服务启动与否状态查看命令:
netstat -tnl |grep ":25"
默认收发邮件仅在本机上的用户间进行,且只能通过回环接口上的地址进行。
q:退出
N:查看第N封邮件
发邮件给指定用户(系统内):
# mail USERNAME[@HOSTNAME]
-s "SUBJECT" 主题
echo | mail 也可以使用管道
TIME的格式
精确时间:
HH:MM
模糊时间:
now+#UNIT
noon , midnight,teatime, tomorrow
作业队列查看:
at -l, atq
删除尚未运行的作业:
at -d [JOB_NUM], at rm
也可以 把at要执行的所有任务放置于文件中,让at读取此文件作为要运行的任务(适用量大的作业)
at -f /PATH/TO/SOMEFILE TIME
batch:无须指定时间,会自动在将来的某个系统资源较空闲的时间点运行
周期性任务计划:cron
依赖于后台服务,查看运行状态
service crond status CentOS {5,6}版本查看命令,如有以下输出结果则可使用cron
crond (pid 1680) is running
cron任务有两类:
系统cron: /etc/crontab
用户cron: 定义在/var/spool/cron/目录中与用户名同名的文件中
每行定义一个独立的任务:
查看/etc/crontab后有以下信息
[[email protected] ~]# cat /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
由以下3部分组成:
时间点(周期性任务)
user-name:用户身份
command:要运行的任务
注意:建议在定义cron任务时,所用到的命令使用绝对路径,或自定一个拥有完整路径的环境变量。
时间表示法:
1.每个时间为都应该使用期可用的有效取值范围内的值,*用于表示使用期所有有效取值,
2. */#:在对应的时间位有效取值上每# 个时间单位一次
注意:定义分钟时的取值范围需能被60整除
3. 连续时间点: -
4.离散时间点:,
任务运行后的结果:邮件发送给任务相关用户:
丢弃邮件通知:输出重定向
COMMAND > /dev/null
COMMAND &> /dev/null
COMMAND > /dev/null 2>&1
/dev/null:软件模拟出的设备, bit bucket,数据黑洞
用户cron任务的定义:
crontab命令:
-l:列出已定义的所有任务
-e:打开编辑器
-r:remove,移除所有任务
-u user: 不是管理自己的cron任务,而是指定的目标用户的cron任务;仅root拥有管理其它用户的cron任务的权限;默认管理自己的
注意:crontab文件内的%需转义,或者用单引号对其引用。
作业::
每周一到周六的凌晨3点20分,运行cp命令对/etc/目录进行归档另存,存储位置为/backups/etc-YYYY-MM-DD
20 3 * * 1-6 /bin/cp /etc /backups/etc-$(date+‘%Y-%m-%d‘)
[[email protected] ~]# mkdir -p /backups/etc [[email protected] ~]# crontab e [[email protected] etc]# crontab -l 20 3 * * 1-6 /bin/cp /etc /backups/etc-$(date +‘%Y-%m-%d‘)
每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backup/fstab-YYYY-MM-DD-hh-mm-ss
30 2 * * 7 /bin/cp /etc/fstab /backup/fstab-$(date +‘%Y-%m-%d-%H-%M-%S‘)
[[email protected] etc]# mkdir -p /backups/fstab [[email protected] etc]# crontab e [[email protected] etc]# crontab l 30 2 * * 7 /bin/cp /etc/fstab /backup/fstab-$(date +‘%Y-%m-%d-%H-%M-%S‘)
每天晚上12点,取得/proc/meminfo文件中所有以S或M开头的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上类似===============分隔线
6 0 * * * /bin/egrep /proc/meminfo "^[S,M].*" >> /statistics/meminfo.txt && echo ========================== >> /statistics/meminfo.txt
[[email protected] etc]# mkdir -p /backups/fstab [[email protected] statistics]# crontab e [[email protected] statistics]# crontab -l 6 0 * * * /bin/egrep /proc/meminfo "^[S,M].*" >> /statistics/meminfo.txt && echo ========================== >> /statistics/meminfo.txt