Linux——crontab定时任务

一、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的环境变量

猜你喜欢

转载自www.cnblogs.com/lxs0817/p/9261369.html