【SRE笔记 2022.9.15 linux定时任务和时间同步】

学习方法

  • 学习很多知识,通过实践总结出步骤,并总结每个步骤的注意点,进行排错、扩展。

命令扩展

[root@aaa ~]# basename  /root/scripts/tar.sh   # 取路径最终的文件名
tar.sh
[root@aaa ~]# dirname /root/scripts/tar.sh   # 取路径的前路径
/root/scripts

Linux系统定时任务

定时任务软件

at(不用)

  • at定时任务软件(依赖于atd服务)适合仅执行一次就结束的调度任务工作。

anacron(几乎不用)

  • 主要是为非7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行任务工作。它会监测服务器停机期间应该执行但是并没有执行的任务工作,并将该任务执行一遍

cron

  • 定时任务软件依赖于crond服务

系统定时任务计划

[root@aaa ~]# ll /var/log/messages*     #每周一次的系统日志
-rw-------. 1 root root 1184598 Sep 16 00:11 /var/log/messages
-rw-------. 1 root root 5534062 Aug 22 20:07 /var/log/messages-20220822
-rw-------. 1 root root  550004 Aug 28 03:27 /var/log/messages-20220828
-rw-------. 1 root root 1350157 Sep  5 06:35 /var/log/messages-20220905
-rw-------. 1 root root  823611 Sep 11 07:17 /var/log/messages-20220911
[root@aaa ~]# ll /var/log/secure*      # 每周一次的安全日志
-rw-------. 1 root root 17502 Sep 15 23:55 /var/log/secure
-rw-------. 1 root root 50939 Aug 22 19:33 /var/log/secure-20220822
-rw-------. 1 root root 18425 Aug 26 23:33 /var/log/secure-20220828
-rw-------. 1 root root 21465 Sep  5 06:22 /var/log/secure-20220905
-rw-------. 1 root root 13057 Sep  9 22:13 /var/log/secure-20220911

系统定时任务配置文件

[root@aaa ~]# ll /etc/logrotate.conf /etc/cron.daily/logrotate 
-rwx------. 1 root root 219 Apr  1  2020 /etc/cron.daily/logrotate
-rw-r--r--. 1 root root 662 Jul 31  2013 /etc/logrotate.conf
[root@aaa ~]# cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
	minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

定时任务语法

  • 查看定时任务列表
[root@aaa ~]# crontab -l
no crontab for root
  • 编辑定时任务
[root@aaa ~]# crontab -e
  • 查看crontab文件:分 时 日 月 周
[root@aaa cron]# cat /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
  • *号代表每,任意时间都

定时任务配置文件

[root@aaa cron]# ll /var/spool/cron/   # 定时任务路径
total 0
  • 定时任务在该目录下以用户名字命令的文件,文件里就是定时任务的指令
[root@aaa cron]# ll /etc/cron.deny  # 该文件中的所列用户不允许使用crontab命令,不常用         
-rw-------. 1 root root 0 Jan 14  2022 /etc/cron.deny
  • -减号 可做分隔符,表示时间段

  • ,逗号可用作分割时段

  • 每天的17-19点执行任务

* 17,18,19 * * *
  • /n代表数字,每隔n单位时间,如每10分钟执行可表示为 */10 * * * *,因为*的范围是0~59
    也可表示为0~59/10

服务依赖

[root@aaa cron]# systemctl status crond.service 
* crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
[root@aaa cron]# systemctl start crond.service 
[root@aaa cron]# systemctl enable crond.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/crond.service to /usr/lib/systemd/system/crond.service.

注意事项

  • 编辑定时任务完成后,无需重启定时任务,crond会自动检查更改的变化
  • 当定时任务不能正确执行时,可查看定时任务日志文件(/var/log/cron)获取故障信息
  • 0在周的位置上代表日。

实例和实践

  • 每天的23点,0点-7点每隔1小时每分钟执行
* 23,00-07/1 * * *
``
 - 向/data/hd/test.log中每分钟追加一个“i am learning 'date' ”
 - 确定定时服务处在运行状态,进入编辑定时任务时要写注释,做什么,为谁做,谁做的,尽量用英文

```bash
[root@aaa ~]# crontab -l
# do what for whom   who did  at time
* * * * * echo "i am learning `date`" >> /data/hd/test.log

[root@aaa ~]# tail -f /data/hd/test.log 
i am learing Sat Sep 17 00:18:51 CST 2022
i am learing Sat Sep 17 00:18:53 CST 2022
i am learing Sat Sep 17 00:18:53 CST 2022
i am learing Sat Sep 17 00:18:54 CST 2022
i am learning Sat Sep 17 00:24:02 CST 2022
i am learning Sat Sep 17 00:25:01 CST 2022
i am learning Sat Sep 17 00:26:01 CST 2022
i am learning Sat Sep 17 00:27:01 CST 2022
i am learning Sat Sep 17 00:28:01 CST 2022

ntpdate时间同步

[root@aaa ~]# ntpdate ntp5.aliyun.com
16 Sep 16:42:00 ntpdate[1744]: step time server 203.107.6.88 offset -28798.758883 sec
  • 在时间同步完成后会有如上输出,所以在做定时任务时,一定要将其命令的正确和错误的输出都加入黑洞,避免产生过多小文件导致inode过多。
*/5 * * * *  ntpdate ntp5.aliyun.com  &>/dev/null   或者   >/dev/null  2>&1

文件定时备份

  • 每天00点10分,备份/etc/rc.local,/var/splool/cron/root,/etc/hosts,使用2022-09-16时间格式作为压缩包名称的一部分,备份到/backup目录下。
  • # 软链接文件,打包时主要加h
[root@aaa ~]# ll /etc | grep local
-rw-r--r--.  1 root root     19 Aug 14 18:13 locale.conf
lrwxrwxrwx.  1 root root     35 Aug 14 18:13 localtime -> ../usr/share/zoneinfo/Asia/Shanghai
lrwxrwxrwx.  1 root root     13 Aug 16 00:55 rc.local -> rc.d/rc.local   # 软链接文件,打包时主要加h
  • 定时任务执行的命令不能有%,如果用需要用\转义。因为定时任务不识别%。
  • 定时任务尽量用脚本(命令放到文件里
  • /bin/sh 脚本全路径
  • 执行命令后加&>/dev/null 或者>/dev/null 2>1,避免产生过多小文件
[root@aaa ~]# tar zcfh /backup/conf_$(date + %F).tar.gz  /etc/rc.local /var/spool/cron/root /etc/hosts
[root@aaa ~]# cat /root/scripts/tar.sh 
/bin/tar zcfh /backup/conf_$(date + %F).tar.gz  /etc/rc.local /var/spool/cron/root /etc/hosts

定时任务配置顺序

  • 命令行输入命令:备份的路径要存在,软链接文件注意加h,打包要加时间和执行频率要匹配,命令要加全路径,路径也写明全路径,可以加输出测试
  • 将命令写入脚本:脚本要放在规范的路径下如/scripts目录下,生产中的命令不要随意打印输出信息,时间变量%需要被转义,若脚本中调用了系统环境变量,需要重新定义,瑞软脚本执行能正常调用环境变量,但是定时任务不行,需要重新定义,因为定时任务执行的脚本属于非登录shell,所以脚本中使用的环境变量不能获取系统级别的环境变量。source在定时任务中执行也不行,都需要重新定义。
  • 执行脚本测试:运行前可加可不加执行权。使用/bin/sh(无需给脚本赋执行权),脚本也要全路径。
  • 编辑定时任务:加注释,尽量以脚本形式执行,在指定用户下执行相应的定时命令,
  • 测试定时任务技巧:修改系统时间,增加定时任务调整执行频率,通过定时任务输出调试定时任务(重定向日志输出),通过/var/log/cron来调试任务

定时任务生产故障案例

  • linux中开源的邮件软件从早起的qmail,到sendmail 再到postfix,自建相对复杂,建议购买企业邮箱
  • no space left on device 案例
  • 关于centos 5 执行ls /var/spool/clientmqueue 命令查看,长时间未显示结果,执行rm -rf 删除该目录文件,发现无法删除,需要执行ls | xargs rm -rf 可删除
  • /var/spool/clientmqueue 目录是邮件系统存放临时右键的目录(c6之前)
  • 对于c6,c7,是如下目录
[root@aaa ~]# cd /var/spool/postfix/maildrop/ 
  • 大量的小文件就是邮件,inode满,block远大于inode
  • 当邮件系统未开启时,同事定时任务不加隐藏输出的时候,定时任务的输出和报错会给root发邮件
    在这里插入图片描述
  • 如何防止大量小文件导致磁盘满的方法
  • 尽量在定时任务后加&>/dev/null
  • 关闭邮件服务(不建议使用,会代理额外的安全问题)
  • 加定时清理任务,如清理30天以前的。
  • 1个重启resin脚本,需要在某一时间重启resin服务器,手动执行正常,但定时任务不执行案例
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习使我清醒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值