linux任务计划系统级别命令,Linux系统上的任务计划相关命令at、crontab的使用方法…

  • Post author:
  • Post category:linux


一、总结Linux系统上的任务计划at、crontab的详细使用方法

1、计划任务说明

在未来时间点一次性执行某任务:at,batch;

周期性执行某任务:crontab;

2、电子邮件服务

计划任务默认以邮件的形式将结果发送给执行任务的用户

mail命令:

mail username(@hostname):进入交互式收发邮件接口

mail -s ‘SUBJECT’ username@hostname:设置邮件主题

< /path/from/somefile:将文件内容发送给收件人

echo “xxx ” |  mail -s ‘SUBJECT’ username@hostname : 将echo 输出结果发送给收件人

3、at命令使用

at  [option]…..TIME

(1)常用选项

-q QUEUE:at作业队列

-f  /path/from/somefile:从指定的文件中读取要运行的作业

-l:查看作业队列中的等运行的作业列表(等于atq命令)

-c at_job_num :查看待运行作业的内容

-d 编号:删除指定作业,相当于at  rm

(2)TIME格式

绝对时间:

HH:MM,

MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY or [CC]YY-MM-DD

相对时间:

now+#UNIT(now+3minute)

minute, hour, day, week

模糊时间:

midnight,noon,teatime

[root@localhost ~]# /etc/init.d/atd status

atd is stopped

[root@localhost ~]# /etc/init.d/atd start

Starting atd:                                              [  OK  ]

[root@localhost ~]# at 17:19

at> ls /etc

at> cat /etc/fstab

at>

job 2 at 2015-09-08 17:19

You have mail in /var/spool/mail/root

4、batch:由系统自行选择在资源空闲的时候运行指定任务

5、crontab:周期性任务计划

守护进程:crond

[root@localhost ~]# /etc/init.d/crond status

crond (pid  1977) is running…

(1)系统cron任务:没有默认运行用户身份,所以需要额外指定运行者

配置文件:/etc/crontab

(2)用户cron任务:由某个用户提交,默认以提交者身份运行(建议使用crontab -e)

配置文件:/var/spool/cron/USERNAME

(3)配置文件字段解析

[root@cwc01 ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# For details see man 4 crontabs

# 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

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed

*****:5个时间点:(分 小时 日 月 周几)

分钟:0-59

小时:0-23

日:1-31

周几:0-7

几月几日与周几不建议同时使用

user-name:以哪个用户的身份运行任务

command to be executed:要运行的任务(命令)

实例:

每年:2 3 4 5 *

每月:20 18 6 * *

每天:20 9 * * *

每周:17 16 * * *

每小时:3 * * * *

每分钟:* * * * *

时间点表示法:

1、 *:对应时间点有效取值范围内的每个时间点

2、-:表示特定连续时间范围( 40  3  *  *  1-5   command)

3、 ,:表示离散时间点(30  2  *  * 2,4,6 command)

4、/#:有效时间范围内的每#个时间单位一次;用于指定频率()

*/3 * * * *  command :  每3分钟执行一次

* */3 * * *  command : 每三个小时到达时,此小时内每分钟都执行一次

6 */3 * * *  command : 没三个小时执行一次

注意:并不能精确到7分钟一次(可使用sleep机制)

(4)crontab命令

crontab [-u user] [-l] [-r] [-e]

-u user: 不是管理自己的cron任务,而是指定的目标用户的cron任务;仅root拥有管理其它用户的cron任务的权限;默认管理自己的

-l:list,列出任务

-r:remove,移除所有任务

-e:edit,编辑,打开一当前shell会话的默认编辑器来编辑cron任务表

注意:

(1) 如果不想接收任务执行结果的通知邮件:

COMMAND > /dev/null

COMMAND &> /dev/null

(2) 对于crontab文件来讲,%有特殊功用;如果命令中会出现%, 要记得转义,或者用单引号对其引用;

(3) crontab的PATH变量与用户的变量不完全相同,所以,建议在cron中的任务要使用绝对路径

/root/bin/a.sh(包括脚本中要使用的命令)

二、每周一到周六的凌晨3点20分,运行cp命令对/etc/目录进行归档另存,存储位置为/backups/etc-YYYY-MM-DD;

[root@cwc01 ~]# mkdir -pv /backups

mkdir: created directory `/backups’

[root@cwc01 ~]# crontab -e

no crontab for root – using an empty one

20 3 * * 1-6 /bin/cp -a /etc /backups/etc-`date +F%`

三、每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backup/fstab-YYYY-MM-DD-hh-mm-ss;

30 2 * * 7 /bin/cp -a /etc/fstab /backup/fstab-`date +F`

四、每天晚上12点,取得/proc/meminfo文件中所有以S或M开头的行,追加至/statistics/meminfo.txt文件中,且每天的消息之前,要加上类似===============分隔线

[root@cwc01 ~]# mkdir -pv /statistics

mkdir: created directory `/statistics’

0 0 * * *  /bin/echo -e “===========\n” >> /statistics/meminfo.txt && /bin/grep “^[S|M]” /proc/meminfo  >> /statistics/meminfo.txt