系统环境:
SUSE Linux Enterprise Server 10 SP1 (x86_64)
问题背景:
由于线上系统环境下的crontab内容比较多,在进行日常crontab任务调度时,经常会异常挂掉而影响业务的正常使用,因此结合C和Shell写了一个简单的对crontab进行健康检测的功能。
处理思路:修改syslog的配置参数,把crontab调度日志单独抽取出来,同时在crontab项里添加检测标记,通过后台守护进程定期检测状态标记来判断当前crontab调度是否正常,同时为了避免日志文件过大而影响性能,会定期对日志文件做切割和清理处理。
#--------------------------------------------------------------------------------------------------------------------------------------------
1、相关目录创建
# mkdir -p /data/logs/crontab
# mkdir -p /data/scripts
# mkdir -p /data/backup/crontab
#--------------------------------------------------------------------------------------------------------------------------------------------
2、crontab健康检测C代码
#cd /data/scripts
# vim check_cron_process.h
#vim check_cron_process.c
#vim Makefile
#make
#/data/scripts/check_cron_process
#--------------------------------------------------------------------------------------------------------------------------------------------
3、crontab任务调度日志配置【新增】
# vim /etc/syslog.conf
#vim /etc/syslog-ng/syslog-ng.conf
#/sbin/service syslog restart
#--------------------------------------------------------------------------------------------------------------------------------------------
4、crontab任务调度日志处理
(1)、日志切割与清理
# vim/data/scripts/cut_cron_log.sh
(2)、crontab信息备份
#vim /data/scripts/backup_crontab.sh
(3)、crontab垃圾头信息清理
# vim /data/scripts/clean_crontab_trash.sh
(4)、crontab设置
#crontab -e
## crontab日志切割与清理
00 00 * * * /data/scripts/cut_cron_log.sh >/dev/null 2>&1
## 运行状况检测标记
*/1 * * * * cd /usr/local; echo >/dev/null 2>&1
## crontab信息备份
30 08 * * * /data/scripts/backup_crontab.sh >/dev/null 2>&1
## crontab垃圾头信息清理
*/30 * * * * /data/scripts/clean_crontab_trash.sh >/dev/null 2>&1