【运维知识基础篇】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 列出定时任务

[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. 命令如何在命令行中执行
  2. 命令在定时任务中怎么表示
  3. 执行查看结果
  4. 排错

示例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不够用,无法写入数据到磁盘

 

解决问题:

  1. 关闭邮件功能,定时任务执行会产生小文件
  2. 开启邮件可以解决问题,但是会影响服务器性能
  3. 对外服务器关闭邮件功能,定时任务的结果定向到空,不会产生小文件

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

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

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

#定时任务结果重定向到空
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就成功不了,可以去查看邮件,邮件辅助我们排查问题

解决问题:

  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年运维经验,持续分享运维干货,感谢大家的阅读和关注!

目录
相关文章
|
8天前
|
运维 关系型数据库 MySQL
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
day03-Linux运维-Xshell优化和Linux系统命令入门(2)
|
8天前
|
运维 Linux Shell
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
day03-Linux运维-Xshell优化和Linux系统命令入门(1)
|
8天前
|
运维 程序员 Linux
运维最全Linux 基本防火墙设置和开放端口命令,2024年最新程序员如何自我学习和成长
运维最全Linux 基本防火墙设置和开放端口命令,2024年最新程序员如何自我学习和成长
|
8天前
|
运维 Ubuntu 安全
运维最全linux 命令行操作串口_linux串口命令(2),2024年最新Linux运维源码的Binder权限是如何控制
运维最全linux 命令行操作串口_linux串口命令(2),2024年最新Linux运维源码的Binder权限是如何控制
运维最全linux 命令行操作串口_linux串口命令(2),2024年最新Linux运维源码的Binder权限是如何控制
|
8天前
|
运维 Linux Perl
运维最全linux 命令行操作串口_linux串口命令(1),21年Linux运维面经分享
运维最全linux 命令行操作串口_linux串口命令(1),21年Linux运维面经分享
运维最全linux 命令行操作串口_linux串口命令(1),21年Linux运维面经分享
|
8天前
|
消息中间件 运维 Linux
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
|
8天前
|
运维 Linux 程序员
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
|
8天前
|
运维 网络协议 Linux
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
|
8天前
|
开发框架 .NET Linux
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
|
11天前
|
监控 关系型数据库 MySQL
【Zabbix 6(2),2024最新阿里Linux运维面经
【Zabbix 6(2),2024最新阿里Linux运维面经

热门文章

最新文章