一、crontab基础知识
安装包:cronie
相关文件:存放目录 ——/var/spool/cron/root(root为用户名)
日志记录 ——/var/log/cron(无法显示正误)
用户黑名单——/etc/cron.deny
前提:1.crond是否运行:/etc/init.d/crond status或者ps -ef|grep crond
2.crond是否开机自启:chkconfig |grep crond
参数:crontab -e —— vi /var/spool/cron/root
crontab -l —— cat var/spool/cron/root
小问题:为什么要使用命令crontab而不是直接编辑文件/var/spool/cron/root
原 因:1.命令crontab有语法检查功能,可自查格式正误;2.方便。
二、crontab定时任务
格式: * * * * * 命令/脚本
(分钟0-59) (小时0-23 ) (日期1-31 ) (月1-12) (星期 0-6)
表示整点:00 07-11 * * *
注意事项:定向到文件时,加上2>&1;无定向到文件时,>/dev/null(黑洞) 2>&1。
练习:书写定时任务完成:每天晚上12点备份/etc/rc.local /etc/sysconfig/ /var/spool/cron /etc/fstab 这些文件到/backup目录
step 01 命令行测试——单条命令
tar zcf backup/`date +%F`.tar.gz etc/rc.local etc/sysconfig/ var/spool/cron etc/fstab
step 02 把命令放入脚本
vim /server/scripts/tar1.sh
#!/bin/bash
cd / && tar zcf backup/file_`date +%F`.tar.gz etc/rc.local etc/sysconfig/ var/spool/cron etc/fstab
step 03 测试脚本是否可以使用
sh /server/scripts/tar1.sh
step 04 写定时任务
crontab -e
#copy files to /backup by doctor at 2018.6.2
00 00 * * * /bin/sh /server/scripts/tar1.sh >/dev/null 2>&1
step 05 检查结果
1.日志
tail -f /var/log/cron
Jun 5 00:00:14 oldboyedu-01 CROND[4552]: (root) CMD (/bin/sh /server/scripts/tar1.sh >/dev/null 2>&1)
2.结果
[root@oldboyedu-01 backup]# ll
total 56
-rw-r--r--. 1 root root 56572 Jun 5 00:00 file_2018-06-05.tar.gz
三、crontab常见问题
(一)如果定时任务规则结尾不加>/dev/null 2>&1或者追加到某个文件中 2>&1,很容易导致硬盘inode空间被占满,从而系统服务不正常。
情况:1.邮件软件开启了---------定时任务会不断的给root用户发邮件
#you have new mail in /var/spool/mail/root
2.邮件的软件没有开启-----邮件存放在/var/spool/postfix/maildrop/
结果:大量小文件堆积,会导致inode满了
解决:1.查找小文件目录 find / -type d -size +1M
2.确认目录无用后单春,记录好目录权限和所有者
(二)定时任务运行脚本环境变量问题。
1.定时任务运行脚本时可以识别的PATH只有/bin /usr/bin
故障:定时任务中的脚本有ifconfig命令,或提示command not found
解决:①使用命令的绝对路径 /sbin/ifconfig
②脚本开头重新定义PATH
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:~/bin
2.java环境变量问题——重新定义java的环境变量