Linux例行工作排程(at,crontab 定时任务执行)

一、Linux例行工作排程

Linux例行工作排程即指在Linux中定时的运行任务,通常分为两类:只执行一次的定时任务和循环执行的定时任务。

1. 循环执行的定时任务(crontab)

crontab :crontab 这个指令所设定的工作将会循环的一直执行下去!可循环的时间为分钟、小时、每周、每月或每年等。crontab 除了可以使用指令执行外,也可编辑 /etc/crontab 来支持。 让 crontab 可以生效的服务则是 crond 这个服务。

1.2. 创建循环定时任务:

可以通过指令和系统配置文件两种方式来创建循环执行的工作任务。

1.2.1. 通过指令:crontab -e

执行此命令之后会进入vi编辑界面,可以使用vi编辑器相关命令进行编辑定时任务,每行表示一个任务。实际上此命令是编辑文件/var/spool/cron/用户名,例如用户frank使用此命令编辑并保存任务后,所有任务将会被写进/var/spool/cron/frank这个文件中。

编辑格式要求:每一行代表一个任务,每个字段之间使用空格分隔,这里一共6个字段。分别代表的意义是分钟、小时、日期、月份、周、指令。

#任务的格式
#例:每晚23点10分,23点20分执行/home/frank/test.sh脚本
10,20 23 * * * /homefrank/test.sh

下面是对应各个字段的意义和取值范围:

分钟小时日期月份指令
0 - 590 - 231 - 311 - 120 - 7指令

注意:周(第5个字段)——取值 0或7 都代表星期天

一些匹配字符的含义:

特殊字符代表意义
* (星号)代表任何时刻都接受,即匹配所有取值
例:0 12 * * * command 表示不论何月、何日的礼拜几的12:00执行
, (逗号)代表分隔时段的意思,即用逗号分隔的值都匹配
例:10,20 23 * * * command 表示不论何月、何日的礼拜几的23:10 和 23:20执行
- (减号)代表一段时间范围内,但是只能取整数
例:20 8-12 * * * command 里面的8-12代表 8,9,10,11,12都匹配
/n (斜线)n 代表数字,亦即是『每隔 n 单位间隔』的意思
例:* */1 * * * command 表示每隔1小时执行
1.2.2. 通过编辑系统配置文件:/etc/crontab

第二种创建排程任务方式通过编辑系统配置文件:/etc/crontab

文件内容和实例如下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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
# 分 时 日  月 周 执行者用户 需执行的命令
#
#例子:每隔1小时以用户frank的身份执行一次/home/frank/test.sh脚本
* */1 * * * frank /home/frank/test.sh

使用系统配置文件编辑任务时需要多写一个字段即执行者用户。因为使用crontab -e时执行者用户即为当前用户。也可以使用crontab -u username -e来指定为某个用户建立或移除工作任务。

1.3. 显示定时任务

使用命令crontab -l 可以查阅使用者目前的工作任务。

1.4. 移除定时任务

移除某一项工作任务应该再次使用crontab -e指令来编辑删在这里插入代码片除。
移除当前使用者所有的任务使用crontab -r指令。

1.5. 限制能使用crontab指令的用户

为了安全性可以限制能使用crontab指令的用户:

  1. 文件/etc/cron.allow中所记录的用户可以使用crontab指令,若未记录则不可以使用;
  2. 文件/etc/cron.deny中所记录的用户不可使用crontab命令,若未记录则可以使用。

生效文件的选择优先级:/etc/cron.allow 比 /etc/cron.deny 的优先级高。建议保存其中一个文件即可。系统默认保留的是/etc/cron.deny文件。
文件的格式:一个账号写一行。

2. 执行一次的定时任务(at)

at:at 是个可以处理仅执行一次就结束排程的指令,不过要执行 at 时, 必须要有 atd 这个服务

2.1. 创建一次性任务

使用命令at TIME会进入一个 at shell 的环境来让用户下达工作指令。
TIME:时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格
式有:

  1. HH:MM 例: at 04:00
    在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
  2. HH:MM YYYY-MM-DD 例: 04:00 2019-03-17
    强制规定在某年某月的某一天的特殊时刻进行该工作!
  3. HH:MM[am|pm] [Month] [Date] 例: 04:00pm March 19
    也是一样,强制在某年某月某日的某时刻进行行!
  4. HH:MM[am|pm] + number [minutes|hours|days|weeks]
    例:now + 5 minutes04:00pm + 3 days
    就是说,在某个时间点『再加几个时间后』才进行。

使用 at 这个指令来产生所要运作的工作会以文本文件的方式写入 /var/spool/at/ 目录下。

2.2. 显示任务

at -l :at -l 相当于 atq,列出目前系统上面的所有该用户的 at 排程。
at -v:可以使用较明显的时间格式栏出 at 排程中的任务栏表。
at -c :可以列出后面接的该项工作的实际指令内容

2.3. 移除任务

at -d :at -d 相当于 atrm,可以取消一个在 at 排程中的工作;
需要先使用查询at工作排程命令 at -latq 显示所有排程,再根据显示的第一列的jobnumber使用 atrm [jobnumber]命令来取消该任务。

2.4. 命令使用限制

也有两个文件分别为/etc/at.allow和/etc/at.deny,其意义和crontab的文件意义一致。
当两个文件都不存在时,只有root用户可以使用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值