当前位置:   article > 正文

【运维知识基础篇】Linux定时任务_linux的定时任务怎么写

linux的定时任务怎么写

今天给大家介绍下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 列出定时任务

  1. [root@VMware-koten ~]# cat /etc/crontab
  2. SHELL=/bin/bash #解释器
  3. PATH=/sbin:/bin:/usr/sbin:/usr/bin #定时任务命令在里面查找
  4. MAILTO=root #出错时候将信息传递给root
  5. # For details see man 4 crontabs
  6. # Example of job definition:
  7. # .---------------- minute (0 - 59)
  8. # | .------------- hour (0 - 23)
  9. # | | .---------- day of month (1 - 31)
  10. # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
  11. # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
  12. # | | | | |
  13. # * * * * * user-name command to be executed
  14. # 分 时 日 月 周 执行用户
  15. [root@VMware-koten ~]#

定时任务的符号

* 表示每

*/5 表示间隔5分钟执行一次定时任务 05,10,15,20,25,30,35,40,45,50,55,00 而不是以当前时间+5

- 表示区间范围

, 表示间隔

示例1:每分钟将自己的名字写入家目录中的1.txt

写定时任务的流程

  1. 命令如何在命令行中执行

  1. 命令在定时任务中怎么表示

  1. 执行查看结果

  1. 排错

示例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 打包放在上面的目录

  1. IP=`ifconfig eth0 |awk 'NR==2{print $2}'`
  2. TIME=`date +%F`
  3. mkdir -p /opt/${IP}_$TIME
  4. tar zcvf /opt/${IP}_$TIME/${TIME}.tar.gz /etc/hosts /etc/passwd
  5. 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不够用,无法写入数据到磁盘

 

解决问题:

  1. 关闭邮件功能,定时任务执行会产生小文件

  1. 开启邮件可以解决问题,但是会影响服务器性能

  1. 对外服务器关闭邮件功能,定时任务的结果定向到空,不会产生小文件

第二种解决方案,定时删除临时小文件

  1. 对内的服务器(测试服务器)开启也行,关闭也可以,看自己的喜好

对外服务器邮件功能关闭后

  1. #定时任务结果重定向到空
  2. systemctl stop postfix
  3. * * * * * root echo hehe &>/dev/null
  4. #定时删除小文件
  5. #临时小文件存放目录
  6. /var/spool/postfix/maildrop
  7. * * * * * 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就成功不了,可以去查看邮件,邮件辅助我们排查问题

解决问题:

  1. 将PATH变量写入定时任务中

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
  1. 如果变量在脚本中可以将PATH变量定义在脚本

 

9、java环境变量 data/java/bin

 

写脚本的流程

1.命令行可以执行成功

2.写入脚本,执行脚本可以执行成功

3.写入定时任务进行测试

4.排查问题(结果,postfix开启邮件,个人经验)


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/1003098
推荐阅读
相关标签
  

闽ICP备14008679号