Linux学习之路6-Mail、计划任务

Mail、计划任务


mail 命令

基本语法(mail进去后):

    h 显示当前的邮件列表

    l 显示当前支持的命令列表

    d 删除当前邮件, d 1-100 删除第1到100封邮件

    file 显示整个用户邮件存放路径和邮件总数

    fn 指针跳转到第n封邮件上,例如f13 跳转到第13封邮件

    t 阅读某一封邮件,例如t22 阅读第22封邮件

    top 查看当前指针所在邮件的邮件头

    ? 查看命令参数用法

    mail 写邮件

    n 阅读某一封邮件,例n9看第9封,只输n的话,查看当前指针的下一封邮件

    q 退出

 

4种使用方式:

        1.    mail 进入交互式收发邮件接口,再输入mail编辑邮件

        2.    mail -s ‘主题’ username@hostname 编辑邮件内容,CTRL+D或.结束

        3.    mail -s ‘主题’ username@hostname < /PATH/file 文件重定向方式

        4.    echo “hello” | mail -s ‘主题’usernaem@hostname 管道方式

     邮件存放位置

         /var/spool/mail/username

 

     at 命令(需要atd守护进程里面任务的命令建议使用绝对路径,因为命令执行与PATH有关)

             命令参数:

                 -l 查看待运行作业队列,相当与atq

            -f 读取待运行命令列表 例at-f at.list 14:30 (at.list为命令列表或脚本)

            -c 查看待运行作业的内容(运行环境、配置等) 例:at -c 2

            -m 当任务完成时,即使没有输出信息,也以email行驶通知用户

            例:-m at now + 3day

         

        命令格式:

                HH:MM 例:at 22:00

                HH:MM YYYY-MM-DD 例:at 22:00 2015-09-05

                HH:MM [am|pm] [month] [date] 例:at 04pm march 17

                HH:MM [am|pm] + number[minutes|hours|days]

             例:at now + 3days 或at04pm + 3days

 

batch: 由系统自行选择在资源较为空闲时运行指定的任务,命令格式和at一样

 

crontab:周期性任务计划,它需要运行一个守护进程:crond

        参数

             -u 指定用户名,建立该用户的任务

             -e 编辑

             -l 查看任务

             -r 删除所有任务

         

        格式

        # 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

                         # |  |  | |  |

                         # *  *  * *  *  command to be executed

         

        分,小时,日,月,周

        特殊符号:* 任何时刻都接受

                  ,代表分隔时段的意思。例:执行3:00与6:00是0 3,6 * * * command

        -        代表一段时间范围。例:8到12点之前没小时的20分进行一项工作

                                  208-12 * * *

        /n n代表数字,每隔n单位间隔,例:每5分钟执行一次,*/5 * * * *

        /etc/cron.allow,/etc/cron.deny

 

计划任务技巧:

        由于crontab只能精确到分钟,如果要实现秒级任务,有2种方法实现:

        1.    通过sleep命令,只要能被60整除的数(间隔秒数)都可以实现。如果间隔的秒数太少,例如2秒执行一次,这样就需要在crontab 加入60/2=30条语句。不建议使用此方法

             例:要求每20秒钟执行一次cat/etc/fstab

                 crontab -e 添加:

                 * * * * * /usr/bin/cat /etc/fstab

                 * * * * * sleep 20;/usr/bin/cat /etc/fstab

                 * * * * * sleep 20;/usr/bin/cat /etc/fstab

             例2:

                 */1 * * * * sh /root/cron.sh

                 */1 * * * * sleep 30 && sh/root/cron.sh

                 # 每分钟执行两次 每隔30秒执行一次

        2.通过循环语句实现

           例:

        crontab-e

        * * ** * source cron.sh

        cron.sh如下:

             while true;do

                 sleep 3;

                 命令

             done

           每3秒就循环一次,要注意的是,这个是死循环脚本

         

        crontab 中执行多个命令的方法:

        方法1:

        */30* * * * bin/sh /home/xyw/task1.sh 

        */30* * * * bin/sh /home/xyw/task2.sh 

        方法2

        */30* * * * bin/sh /home/xyw/task1.sh; bin/sh /home/xyw/task2.sh 

        方法3

        */30* * * * bin/sh /home/xyw/task1.sh && bin/sh /home/xyw/task2.sh 

        方法4

        */30* * * * bin/sh /home/xyw/task1.sh || bin/sh /home/xyw/task2.sh

         

        crontab中特别要注意的!!!!!

        1. crontab与环境变量

         不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

            1)脚本中涉及文件路径时写全局路径;

            2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:

            cat start_cbp.sh

             #!/bin/sh

             source /etc/profile

             exportRUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

             /usr/local/jboss-4.0.5/bin/run.sh-c mev &

             3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:

            0 * * * * ./etc/profile;/bin/sh/var/www/java/audit_no_count/bin/restart_audit.sh

         

         2. 其他应该注意的问题

            1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。

            2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。

            3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。

            4)千万别乱运行crontab-r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。

            5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。


你可能感兴趣的:(crontab,定时任务,mail,计划任务)