Linux计划任务

本文介绍了在Linux系统中如何使用at和batch命令执行一次性任务,以及如何利用crontab执行周期性任务。包括命令格式、时间格式、任务管理及crontab的安装与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在日常工作或使用计算机时,如果我们需要在某个时间执行某项任务,或在固定周期重复执行某项任务,我们需要对系统设定计划任务;在linux系统中,我们可以使用一次性计划任务atbatch命令,或者周期性计划任务crontab

 

一、一次性任务执行:

1、命令格式:

#at [option] TIME

 

2TIME格式:

特定时间:

HH:MM其中HH为小时,MM为分钟。

MMDDYYMM/DD/YY:其中MM是分钟,DD是第几天,YY是指年份。

now+UNIT其中UNIT单位可以为minutes hoursdays weeks

 

模糊时间:

todaynoonmidnightteatimetomorrow

 

3at任务格式:

#at TIME

at> COMMAND

Ctrl+d:提交任务

 

at有作业队列:使用单个字母表示

at �latq: 查看作业队列中的待执行任务

at -datrm:删除任务。

 

任务作业执行完成后:结果会通过邮件通知给作业提交者

CentOS: 默认会安装并启动邮件服务,仅服务于本地系统;

 

#batch:功能同at,但无须为其指定时间,其会选择系统资源较空闲时执行指定的作业

 

二、 周期性任务执行:

1、安装并启动服务:

需要安装的程序包:crond

#yum install cronie

检查crond

#/etc/init.d/crond status

wKiom1WD33DiqxlmAABOX9QsLMI788.jpg

    如果状态信息为“is stopped”,则需要启动crond

#/etc/init.d/crond start

检查crond开机启动:

#chkconfig �list crond

wKioL1WD4VeRzQOCAABSgmZfwQ8711.jpg

若为非开机启动需要设置开机启动crond

#chkconfig crond on

 

2cron任务分类:

系统cron:定义在/etc/crontab

用户cron:定义在/var/spool/cron目录中,每个用户都有一个与用户名同名的文件,其功能类似于/etc/crontab

 

3crontab使用方法:

用户cron任务的定义方式:

crontab

-uusername:指定用户,无-u选项默认为当前用户。

-l:列出已经定义的所有任务

-e:打开编辑界面定义任务

       -r:移除所有任务  

 

#crontab-u USERNAME �e

 

/var/spool/cron/目录也只有root用户才可读写;普通用户可使用crontab -e命令编辑任务;

 

4crontab格式:

执行#crontab -e,会出现vim编辑器进行任务编辑;

 

格式说明:

#vim /etc/crontab

 wKioL1WD4X-y4hgcAAD6gd34mV8907.jpg

格式:

cron在执行任务命令时需要指定环境变量,例如SHELLPATHHOMEMAILTO等;

 

左侧表示时间,右侧为执行的命令;

每行定义一个独立的任务:

 

时间:

时间由5个数字组成,分别表示:分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-6)。

 

特殊符号:

*:任意数;

/#:每#个单位;

M�N:由MN

A,B,C,…A,B,C等多个数。

 

时间表示法:

1)、每个时间位都应该使用其可用的有效取值范围内的值

3 * * * * | 17 3 * * * | 7 6 5 * * | 7 6 5 4 *

 

2)、某个时间位上的*表示对应时间位的所有有效取值;

1 9 * * 3,每周三的91分。

 

3)、*/#:在对应的时间位的有效取值上每#一次;

*/3 * * * *:每3小时;

0 */3 * * *:每3小时的整点;

*/8 * * * *:每8分钟 0-590, 8, 16, 24, 32, 40, 48, 56

 

4)、某个时间位上的连续区间:-

10-50/3 * * * *:由10分至50分之间,每3分钟执行;

 

5)、离散取值:

1 7,9,13 * * *7:01,9:01,13:01

 

命令:

如果定义在cron中的任务是脚本,此脚本中的各命令查找时遵循的是cronPATH环境变量定义;因此,在命令行中测试无问题的脚本,在cron中未必;

      解决方案:

命令使用绝对路径;在脚本中开始自己定义一个专用PATH环境变量。

 

如果在crontab的用户命令中使用%,得转义,使用\%的格式;不过,如果使用单引号引起来,也可不用转义;

5 3 * * * /bin/touch /tmp/testfile-$(date+\%F-\%H-\%M-\%S)

6 4 * * * /bin/touch /tmp/testfile-$(date+'%F-%H-%M-%S')

 

         执行任务:

         任务作业执行完成后:

每一次的执行结果会通过邮件通知给作业提交者;

 

丢弃邮件通知:

输出重定向:

> /dev/null

&> /dev/null

> /dev/null 2>&1

 

5、补充:

如何实现秒级别的任务:

10秒钟:

* * * * * for i in {1..5}; do echo "howdy";sleep 10; done

0

10

20

30

50

0

 

anacron: crontab的补充机制:

检查有没有过去一个有效周期未曾执行的任务,如果有,在开机后的指定时间点执行一次。


本文出自 “小马的学习记录” 博客,请务必保留此出处http://masachencer.blog.51cto.com/8683770/1663673

转载于:https://my.oschina.net/masachencer/blog/540874

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值