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种使用方式

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

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

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

  • 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分进行一项工作

       20 8-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

             export RUN_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’`。