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

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
18天前
|
监控 Unix Linux
|
22天前
|
运维 监控 网络协议
|
8天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
25 3
|
23天前
|
Linux
Linux Crontab 查看定时任务启动没
【10月更文挑战第20天】在Linux系统中,crontab用于设置周期性执行的任务。查看当前用户的Crontab任务列表,使用`crontab -l`;查看所有用户任务,使用`sudo crontab -l`或指定用户`sudo crontab -u username -l`。
47 5
|
1月前
|
存储 运维 搜索推荐
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
35 1
|
1月前
|
运维 网络协议 安全
Linux安全运维--一篇文章全部搞懂iptables
Linux安全运维--一篇文章全部搞懂iptables
42 1
|
1月前
|
Web App开发 运维 安全
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
|
2月前
|
运维 监控 Linux
深入理解Linux系统运维:命令行工具的力量
【9月更文挑战第14天】在Linux的世界里,命令行工具是系统管理员的瑞士军刀。本文将带你领略命令行的魅力,从基础操作到高级技巧,让你的运维工作更加高效和精准。准备好了吗?让我们一起开启这段探索之旅!
|
3月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
149 3

热门文章

最新文章