Linux计划任务

来源:互联网 发布:学c语言多久可以写爬虫 编辑:程序博客网 时间:2024/06/01 10:04

简单计划任务

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 minutesat> echo "Hello at" at> <EOT>    //输入完任务后,使用 Ctrl+D 提交job 3 at 2016-12-15 16:23

查看任务列表

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

注意

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

batch

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


周期性计划任务

crontab

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

系统cron任务

  • 系统维护作业
  • /etc/crontab

/etc/crontab 格式如下

SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# 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 executed18 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 ~]# crontab18 21 * * * root date > /root/test.txt[root@2w3i-Cs ~]# crontab -l18 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 进行退格操作

注意

  1. 运行结果以邮件通知给相关用户;
  2. 对于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

0 0
原创粉丝点击