您的位置:首页 > 运维架构 > Linux

Linux计划任务

2016-12-19 18:19 260 查看

简单计划任务

at

at 命令在特定时间执行特定任务

语法为:at [option] TIME

[option] 常用选项:

-q QUEUE:使用指定的队列,缺省值为 a

QUEUE范围为a-z,A-Z

-l:列出指定队列中等待运行的作业;想当于 atq

-d:删除指定的作业;相当于 atrm

-c:查看具体作业任务

-f:/path/from/somefile:从指定的文件中读取任务

TIME格式:

HH:MM [YYYY-mm-dd]

noon,midnight,teatime

tomorrow

now+# {minutes, hours, days, OR weeks} (# 号代表数字)

新增计划任务

[root@2w3i-Cs ~]# at -q a now+5 minutes
at> echo "Hello at"
at> <EOT>    //输入完任务后,使用 Ctrl+D 提交
job 3 at 2016-12-15 16:23


查看任务列表

[root@2w3i-Cs ~]# at -l
3   2016-12-15 16:23 a root


注意

作业的执行结果以邮件通知给相关用户

batch

该命令无须指定时间,系统会自行选择空闲时间去执行指定任务

周期性计划任务

crontab

crontab 命令将计划要周期性执行的任务提交给crond,由其来实现到点运行

系统cron任务

系统维护作业

/etc/crontab

/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


例如:想在 每天21点18分运行date命令,在该文件末尾添加如下格式的文本

# 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
18 21 * * * root date > /root/test.txt


用户cron任务

crontab 命令 即编辑的 每个用户的cron任务文件

每个用户都有专用的cron任务文件位置:/var/spool/cron/USERNAME

语法:

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

-l:列出用户所有任务

-e:编辑用户的cron任务

-r:移除所有任务

-i:同 -r 一同使用,以交互式模式让用户有选择地移除指定任务

-u user:仅root可运行,代为为指定用户管理cron任务

例如:想在 每天21点18分运行date命令,执行如下命令

[root@2w3i-Cs ~]# crontab
18 21 * * * root date > /root/test.txt
[root@2w3i-Cs ~]# crontab -l
18 21 * * * root /bin/date > /root/test.txt
[root@2w3i-Cs ~]# cat /var/spool/cron/root
18 21 * * * root /bin/date > /root/test.txt
[root@2w3i-Cs ~]#


Tip:

输入完成后 使用 Ctrl + D 提交, 使用 Ctrl + Backspace 进行退格操作

注意

运行结果以邮件通知给相关用户;

对于cron任务来讲,%有特殊用途;如果在命令中要使用%,则需要转义;不过,如果把%放置于单引号中,也可以不用转义;

Cron任务格式说明

各字段意义

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


如上所示共有7个字段

第1个字段 表示 分钟 (minute) 允许范围 (0 - 59)

第2个字段 表示 小时 (hour) 允许范围 (0 - 23)

第3个字段 表示 天 (day of month) 允许范围 (1 - 31)

第4个字段 表示 月 (month) 允许范围 (1 - 12) 或者使用 jan,feb,mar,apr …表示

第5个字段 表示 星期 (day of week) 允许范围 (0 - 6) 或者使用 sun,mon,tue,wed,thu,fri,sat 表示

第6个字段 表示 用户名(user-name)即会用指定用户名环境变量执行

第7个字段 表示 执行的命令(command to be executed)

时间表示法

(1) 特定值

给定时间点有效取值范围内的值

如:minute (0 - 59), hour (0 - 23),…,等

(2) *

给定时间点上有效取值范围内的所有值

表示”每…”,如:每分钟,每小时,…,等

(3) 离散取值

#,#,#

表示特定时间点

如在minute下 3,6,10

则表示 第3分钟 第6分钟 和 第10分钟

(4) 连续取值

#-#

表示特定时间范围

如在hour下 3-7

则表示 从3点到7点

(5) 在指定时间范围上,定义步长

/#

如 month 下 /3 表示每隔3个月

练习

1.每4小时备份一次/etc目录至/backup目录中,保存的文件名称格式为“etc-yyyy-mm-dd-HH.tar.xz”

* */4 * * * root /bin/tar -cvJf /backup/etc-$(/bin/date +%Y-%m-%d-%H).tar.xz /etc/ > dev/null 2>/root/error.txt


2.每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”

* * * * 2,4,7 root /bin/cp /var/log/messages /logs/messages-$(/bin/date +%Y%m%d)


3.每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中

* */2 * * * root /bin/cat /proc/meminfo | /bin/grep -i ^[SM] >> /tmp/meminfo.txt


4.工作日时间内,每小时执行一次“ip addr show”命令

* */1 * * 1-5 root /usr/sbin/ip addr show


注意

此处使用的 指定用户名 为 root, 则使用该用户的cron服务

执行命令切记一定为绝对路径

如 执行date 为 /bin/date
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息