赞
踩
今天给大家介绍下linux定时任务,定时任务无非就是在什么时间干什么命令。
首先大家要知道文件怎么配置?
定时任务一般用root执行,这里介绍crond(crontab)
crontab -e 用户定时任务 /var/spool/cron/root #有语法检查功能
vim /etc/crontab #直接编辑系统的定时任务
接下来就是怎么去写?
* * * * * root echo hehe
五颗星代表分时日月周
分0-59
时0-23 0表示凌晨12点
日1-31天
月1-12月
周0-6天,0和7都表示星期天
OK,接下来正式开始。
目录
1、定时备份(重要的系统文件 系统数据 业务文件 业务数据等)
什么时间备份,在业务的低谷期备份,不同业务有不同的低谷期,大部分都是凌晨
视频:晚上8-晚上12点
小说:中午12点-凌晨1点
公司官网:上午10点-下午6点
购物:凌晨3点-凌晨5点
游戏:早上8点-早上9点
在低谷期做备份,需要tar打包压缩,打包压缩占用cpu负载是最高的,所以尽量不影响用户体验。
2、定时数据统计
3、定时辅助进程运行
4、其他作用,定时校验看是否被篡改等等
1、系统配置文件
/etc/crontab 系统定时任务
/var/log/cron 定时任务日志
/var/spool/mail/root root的邮件信息 每执行一次就提示一次信息
一般都关闭这个,影响性能
/etc/cron.hourly 每小时执行一次的定时任务配置文件
/etc/cron.daily 每天执行一次的定时任务配置文件
/etc/cron.weekly 每周执行一次的定时任务配置文件
/etc/cron.monthly 每月执行一次的定时任务配置文件
/etc/cron.deny 不允许哪个用户进行定时任务
2、用户的配置文件
/var/spool/cron/root 用户定时任务 vim编辑但不支持语法检查 用crontab -e就可以检查了
crontab -e 编辑---->实际写入到/var/spool/cron/ #有语法检测的功能
crontab -l 列出定时任务
- [root@VMware-koten ~]# cat /etc/crontab
- SHELL=/bin/bash #解释器
- PATH=/sbin:/bin:/usr/sbin:/usr/bin #定时任务命令在里面查找
- MAILTO=root #出错时候将信息传递给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
- # 分 时 日 月 周 执行用户
- [root@VMware-koten ~]#
* 表示每
*/5 表示间隔5分钟执行一次定时任务 05,10,15,20,25,30,35,40,45,50,55,00 而不是以当前时间+5
- 表示区间范围
, 表示间隔
示例1:每分钟将自己的名字写入家目录中的1.txt
命令如何在命令行中执行
命令在定时任务中怎么表示
执行查看结果
排错
示例1:每天七点半吃早餐
30 07 * * * root echo 吃早餐 #写echo,实际当前解释器是看不到的,可以通过日志查看
示例2:每天晚上11点准时睡觉
00 23 * * * root echo 睡觉
示例3:每分钟输出自己的姓名
* * * * * root echo koten
示例4:每个小时的第5分钟执行echo koten
5 * * * * root echo koten
示例5:早上7点到上午11点执行echo koten
00 7-11 * * * root echo koten
示例6:早上7点到上午11点,下午一点到下午三点执行echo koten
00 7-11,13-15 * * * root echo koten #用逗号表示间隔
1、间隔5分钟进行时间同步
*/5 * * * * root ntpdate ntp1.aliyun.com
2、凌晨12点查找7天前的文件删除,或者备份
00 00 * * * root find /data -type f -mtime +7|xargs tar zcvf /opt/etc.tar.gz
00 00 * * * root find /data -type f -mtime +7|xargs rm
3、校验MD5值保证文件被篡改时第一时间发现并恢复业务
find /data -type f |xargs md5sum > /opt/md5.log
*/5 * * * * root md5sum -c /opt/md5.log > /opt/result.txt
其他:定时清空某个文件 定时检查程序运行
用户定时任务格式
crontab -e 编辑配置文件默认里面空的,实际写入到/var/spool/cron/root
* * * * * 可执行命令
crontab -l 列出用户的定时任务
在企业中就用一种配置方式,
要么使用系统定时任务/etc/crontab
要么使用crontab -e 两种是并行的方式,尽量选择一种使用
1、使用定时任务需要按规则做好注释
2、两条命令以上,使用脚本的方式使用
案例:创建opt下IP地址+时间命令的目录
将/etc/hosts /etc/passwd 打包放在上面的目录
- IP=`ifconfig eth0 |awk 'NR==2{print $2}'`
- TIME=`date +%F`
- mkdir -p /opt/${IP}_$TIME
- tar zcvf /opt/${IP}_$TIME/${TIME}.tar.gz /etc/hosts /etc/passwd
- find /opt/${IP}_$TIME/ -type f -mtime +7|xargs rm &>/dev/null
再写入到定时任务,先按每分钟进行测试,再调整到固定时间
3、在定时任务中不识别%需要加转义\% 或者将命令写到脚本里面
4、执行脚本尽量前面加上sh或者bash使用
/server/scripts/backup.sh 需要给脚本执行权限
sh /server/scripts/backup.sh 不需要脚本执行权限
5、执行脚本的结果,定时任务的结果定向到空或者文件中
在执行每条定时任务后,系统会自动给用户发送文件信息
/var/spool/mail/root 对于有用户访问的服务器会将邮件功能关闭 以减少性能损失
关闭后定时任务执行后发邮件发布出去,会生成临时的小文件
执行一行定时任务会执行一个小文件,小文件越多会导致inode不够用,无法写入数据到磁盘
解决问题:
关闭邮件功能,定时任务执行会产生小文件
开启邮件可以解决问题,但是会影响服务器性能
对外服务器关闭邮件功能,定时任务的结果定向到空,不会产生小文件
第二种解决方案,定时删除临时小文件
对内的服务器(测试服务器)开启也行,关闭也可以,看自己的喜好
对外服务器邮件功能关闭后
- #定时任务结果重定向到空
- systemctl stop postfix
- * * * * * root echo hehe &>/dev/null
- #定时删除小文件
- #临时小文件存放目录
- /var/spool/postfix/maildrop
- * * * * * root rm -rf /var/spool/postfix/maildrop/*
6、避免不必要的程序及命令输出,比如tar zcf,tar zcvf,不用v
7、打包尽量到相对路径,一般打包都先cd,在tar ,但是当前解释器不会真的cd,而是在新的解释器下
所以不影响当前界面
8、定时任务的脚本中,程序尽量使用绝对路径
用户定时任务识别的PATH变量,只有/usr/bin/和/bin目录
使用crontab定义定时任务时 只去/usr/bin/和/bin下面查找任务
比如使用ntpdate就成功不了,可以去查看邮件,邮件辅助我们排查问题
解决问题:
将PATH变量写入定时任务中
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
如果变量在脚本中可以将PATH变量定义在脚本
9、java环境变量 data/java/bin
1.命令行可以执行成功
2.写入脚本,执行脚本可以执行成功
3.写入定时任务进行测试
4.排查问题(结果,postfix开启邮件,个人经验)
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。