计划任务:
at:
at TIME
at>
提交任务:Ctrl+d
作业结果:以邮件形式发送到系统上的当前用户
[root@localhost ~]# netstat -tnl | grep "25\>"
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 ::1:25 :::*
查看邮件服务端口25启动没有,SMTP服务正常
读邮件:mail
q:退出
N:查看第几封邮件
发邮件:mali USERNAME[@HOSTNAME]
周期性任务:cron
查看运行后台运行:
# service crond stats
cron 任务有2类:
系统cron:/etc/crontab
用户cron:定义在/var/spool/cron目录中与用户名同名的文件中
每行定义一个独立的任务:
# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root 将通过电子邮件发送给root用户
HOME=/ 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录
# 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
时间点 :周期性任务
username:用户身份
command:要运行的任务:
注意重点:建议在定义cron任务时!所用到的命令使用绝对路径,如果是脚本也建议使用绝对路径,或者自定义一个完整路径的环境变量
时间点:
分钟|小时|天|月|周几
每年:2 3 4 5 * 每年5月4号3点2分
每月:20 18 6 * * 每月6号18号20分
每天:20 9 * * * 每天9点20分
每小时: 3 * * * * 每小时运行
每分钟:* * * * * 每分钟
每周:16 17 * * 3 每周
时间表示法 :
1:每个时间位都使用可用的有效取值范围的值,* 表示:使用所有有效取值
17 * * * * /bin/echo "hello" 每小时17分时运行这个命令
8 9 * * * /bin/echo "hello" 每天运行9点8分这个命令
16 17 * * 3 /bin/echo "hello" 每周3的17点16分运行这个命令
2: */#:在对应的时间位有效值上每#个时间单位一次
*/3 * * * * /bin/echo "hello" 每3分钟运行一次
9 */3 * * * /bin/echo "hello" 每3个小时运行一次
3:连续时间点:
40 3 * * 1-5 /bin/echo "hello" 周1到周5 运行一次
4:离散时间点:
30 2 * * 2,4,6 /bin/echo "hello" 每2,4,6 运行一次
任务运行后结果,邮件发送给任务相关用户
丢弃邮件通知:输出重定向:
COMMAND > /dev/null
COMMAND &> /dev/null
COMMAND > /dev/null 2>&1
用户cron 任务的定义:
crontab -l 列出所有已定义任务
crontab -e :打开编辑界面定义任务
crontab -r :清出所有任务
-u USERNAME 用别的用户建立
-l
-e
-r
# crontab -u USERNAME -e
# crontab -u wskfnso -e
注意:如果是crontab的用户命令中需要使用%时,需要对其转义
* * * * * /bin/touch /tmp/testdir/file-$(date +\%F-\%H-\%M-\%S)
* * * * * /bin/touch /tmp/testdir/file-$(date +'%F-%H-%M-%S')
定义任务的文件保存在/var/spool/cron 下
# ll /var/spool/cron/
total 4
-rw-------. 1 root root 30 Nov 12 19:48 root
# cat /var/spool/cron/root
*/2 * * * * /bin/echo "hello"
提醒:如果在crontab的用户命令中使用%,得转义为\%
5 3 * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt
在使用单引号后,%也可以不转义
5 3 * * * /bin/touch ~/testfile_`date +’%Y-%m-%d‘`.txt
练习:
1、每3分钟执行一个“echo “how are you?””
*/3 * * * * /bin/echo “how are you?”
2、每周2、4、6备份/etc/目录至/backup目录中,备份的文件名以当etc_开头并跟上当日的日期作为文件名
0 0 * * 2,4,6 /bin/tar Jcf /back/etc-`date +'%F'`.tar.xz /etc/*
3.每天6,9,12,15,18查看一下系统当前挂载的所有文件系统,并将查看的结果追加至/tmp/mounts.txt文件中
0 6-18/3 * * * /bin/mount >> /tmp/mounts.txt
4.每天每两小时取当前系统内存空间余量,将其保存至/stats/memory.txt文件中
20 */2 * * * /bin/grep "^MemFree:" /proc/meminfo >> /stats/memory.txt