我们可以使用crontab 执行定时任务。
有一个脚本 cmdb-data.sh
#!/bin/bash
#cmdb数据同步定时任务
ansible all -m setup --tree /usr/local/out
/usr/local/lib/ansible-cmdb/ansible-cmdb /usr/local/out/ > /home/task/overview.html
scp /home/task/overview.html root@192.168.1.150:/usr/share/zabbix/cmdb/
(注意:坑:/usr/local/lib/ansible-cmdb/ansible-cmdb 必须使用绝对路径,因为 ansible-cmdb 是在 /etc/profile 里面配置的环境变量)
每天 00:00 执行时间同步,00:10 执行 cmdb数据同步,23:58分执行日志切割。编辑定时任务如下
crontab -e 编辑定时任务
#Ansible: update time
00 00 * * * ntpdate 192.168.158.100
10 00 * * * /home/task/cmdb-data.sh
58 23 * * * /usr/sbin/logrotate -vf /home/logrotate_java
#每天凌晨1点半执行定时重启任务
30 01 * * * /usr/bin/bash /data/work/python/hitrate/auto_deployment.sh
查看定时任务
crontab -l
查看定时任务日志
如果crontab所执行的命令有输出内容的话,该输出内容会以邮件的形式发送给用户,内容存储在邮件文件。
如果是指定的root用户执行的任务,查查看日志命令为:
tail -n100 /var/spool/mail/root|more
扩展:
时间同步
有些服务器时间不对,此时我们可以通过时间同步,让所有服务器时间保持一致
[root@smy5-1 data]# date
Thu Mar 26 21:13:06 CST 2020
然后
crontab -e 编辑时间同步定时任务
每1分钟同步一次时间
#update time
*/1 * * * * /usr/sbin/ntpdate cn.pool.ntp.org
查看定时任务:
[root@application ~]# crontab -l
#update time
*/1 * * * * /usr/sbin/ntpdate cn.pool.ntp.org
过1分钟后,时间恢复正常
[root@application ~]# date
Thu Mar 26 21:19:59 CST 2020
关于 cn.pool.ntp.org
NTP(Network Time Protocol)可以很方便的解决服务器之间的时间同步问题,用户可以选择NTP官方网站推荐的pool pool.ntp.org地址池,默认CentOS系统自带了ntp软件,如下所示:
[root@application ~]# rpm -qa|grep ntp
ntpdate-4.2.6p5-29.el7.centos.x86_64
[root@application ~]# yum list installed|grep ntp
ntpdate.x86_64 4.2.6p5-29.el7.centos @base
[root@application ~]#