赞
踩
本篇我们来学习linux基础中的crontab命令的使用,linux中crontab命令与at命令的区别如下:
at
命令是在指定的时间只能执行一次任务,crontab
命令可以循环重复的执行定时任务,与Windows 中的计划任务有些类似
crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,在安装完成操作系统后,默认会安装 crond 服务工具,且 crond 服务默认就是自启动的
如果需要安装则执行以下命令
yum install crontabs #安装crond服务
systemctl status crond #查看crond服务状态
系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
1、当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高
2、当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令
3、crontab 执行的每一项工作都会被 记录到 /var/log/cron 这个日志文件中
4、当用户使用 crontab 新建工作之后,该项工作就会被记录到 /var/spool/cron/目录里面
crontab命令运行的格式如下:
crontab [-u user] [-l | -r | -e]
参数 | 说明 |
---|---|
-u | 只有root才能执行该任务 |
-e | 编辑crontab工作内容 |
-l | 查询crontab任务内容 |
-r | 删除cronatb任务 |
crontab -e
意义 | 分 | 时 | 日 | 月 | 周 |
---|---|---|---|---|---|
范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 (0和7都表示周日) |
特殊字符
*:表示任意时刻
-: 表示范围
, (逗号) :分割时段
数字 :指定时间间隔频率,如:每3分钟执行一次:/3
举例:
1 2 * * * : 每天凌晨2点1分执行动作
0 17 * * 1 : 每周一下午17点整执行动作
0 5 1,15 * * :每月1日和15日凌晨5点执行动作
40 4 * * 1-5 :每周一至周五凌晨4点40分执行动作
*/10 4 * * * : 每天凌晨4点每隔10分钟执行动作
3,15 8-11 */2 * * :每隔2天上午8-11点的第3分钟和第15分钟执行动作
* * * * * :每隔1分钟执行动作
#!/bin/bash
echo "this is my test sh"$(date) >> /root/cro.txt #输入结果到cro.txt文件中
[root@server ~] crontab -e #编辑任务内容
* * * * * /bin/bash /root/test1.sh #每隔一分钟执行一次
[root@server ~] crontab -l #查看任务内容
* * * * * /bin/bash /root/test1.sh
该命令的运行结果如下图所示:
可以看到和设定的一样每隔一分钟进行一次输出到该文件中
[root@server ~] crontab -r # 删除任务
[root@server ~] crontab -l # 查看任务
no crontab for root
[root@server ~] crontab -e
0 6 * * 1 /sbin/shutdown -r now #调用系统配置文件进行运行
设置qq邮箱每一分钟发送一次邮件
进入qq邮箱的设置界面,进入账号设置一栏
开启POP3/SMTP 服务
服务未开启的情况下点击根据系统提示进行登录开启
开启服务后进入界面中的管理服务,在安全设置一栏中选择生成授权码,根据系统提示进行操作
授权码生成完毕后复制保存下来,进行下一步操作
[root@server ~] yum install s-nail -y
[root@server ~] vim /etc/s-nail.rc
set from=(自己的qq号)@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=(qq号)@qq.com
set smtp-auth-password=(输入刚才保存的授权码)
set smtp-auth=login
# 注意:文件配置完毕需要强制保存并退出,末行模式下输入wq!
[root@server ~] echo "testmail" | mail -s "testmail" (qq号)@qq.com
[root@server ~] crontab -e
MAILTO=(qq号)@qq.com
* * * * * echo "Hello,world!!!" | mail -v -s "邮件测试" (qq号)@qq.com
实验结果如下图所示:
在实验成功后需要用crontab -r 把该任务进行删除,否则qq邮箱会一直收到测试邮件,可能会妨碍邮箱的正常使用~
[root@server ~] vim /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
分析
每天6:00将日志文件/var/log/messages 文件进行备份,备份到/backup目录中,备份时需要将文件名修改为logfileYYYY-MM-DD-HH:MM:SS
[root@server ~] mkdir /backup
[root@server ~] vim /etc/crontab
0 6 * * * root /usr/bin/cp /var/log/messages /backup/logfile`date +\%Y-\%m-\%d-\%H:\%M:\%S`
# 反引号``:表示将引起的内容识别为命令
# 在crontab中%表示换行,需要增加转义符\进行转义
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。