失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 系统定时任务linux linux系统下定时任务(示例代码)

系统定时任务linux linux系统下定时任务(示例代码)

时间:2021-10-20 04:31:40

相关推荐

系统定时任务linux linux系统下定时任务(示例代码)

linux系统定时任务

1、Linux系统定时任务at

(1)作用:定时任务,指定一个时间执行一个任务,只能执行一次

(2)用法:at [option] TIME

选项:-V 显示版本信息:

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

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

-c:查看具体作业任务

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

-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出

注:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户, at命令依赖于atd服务,需要启动才能实现at任务。

退出at命令:ctrl+d

指定计划任务

at> ls

at>

job 1 at Tue May 9 02:29:00 #退出时按ctrl+d

查看等待的任务

3-04-04 06:42 a root

2-04-03 12:00 a root

删除指定的作业

(3)时间(TIME):定义出什么时候要进行at的任务

常用的时间格式有:

1)HH:MM:在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务。

2)HH:MM YYYY-MM-DD:规定在某年某月的某一天的特殊时刻进行该项任务

3)HH:MM[am|pm] [Month][Date]:规定在某年某月某日的某时刻进行该项任务

4)HH:MM[am|pm] + number[minutes|hours|days|weeks]:规定在某个时间点再加多少时间后才进行

at> touch day123.txt

at> echo hello

at>

[[emailprotected] ~]# at now + 5 hours

at> date

at时间格式的扩展:

1)能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。

2)能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。

3)能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午

4) 能够指定命令执行的具体日期,指定格式为monthday(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。

5)能够使用相对计时法。指定格式为:now +count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。

6)能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间

在中午执行

at> ls –l

[[emailprotected] ~]# at tomorrow #在明天这个时候执行任务

at> wall hi

(4)任务的执行方式

1)交互式

2)输入重定向

3)at –f

交互式执行任务

at> ls

at>

job 4 at -04-03 12:00

[[emailprotected] ~]# at 17:00

job 5 at -04-03 17:00

[[emailprotected] ~]# at 15:00 -f ls #通过-f指定命令存放文件执行任务

job 6 at -04-03 15:00

(4)限制用户的使用权限

控制文件目录:/etc/at.allow和/etc/at.deny

控制文件使用规则:

1)先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);

2)如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者就可以使用 at 命令。

3)如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。

4)在一般的 distributions 当中,由于假设系统上的所有用户都是可信任的,因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思。

5)如果不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。

(5)at队列存放目录:/var/spool/at/

2、Linux系统定时任务cron

(1)概述:

1)作用:周期性任务计划

2)相关的程序包:

cronie:主程序包,提供crond守护进程及相关辅助工具

cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务

crontabs:包含CentOS提供系统维护任务

3)使用前要确保crond守护处于运行状态:

CentOS 7:systemctlstatus crond

CentOS 6:service crondstatus

4)运行原理:计划周期性执行的任务提交给crond,到指定时间会自动运行

系统cron任务:/etc/crontab

用户cron任务:crontab命令

日志:/var/log/cron

(2)系统定时任务

1)配置文件说明:

[[emailprotected] ~]# 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 #user-name代表以哪个用户身份去执行,后面为命令

2)时间表示法:

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

*:给定时间点上有效取值范围内的所有值,表示“每...”

离散取值:#,#,#

连续取值:#-#

在指定时间范围上,定义步长/#: #即为步长

注:如果同时出现周和日期为或的关系,只出现周或日期为且的关系

特殊的时间格式:

@yearly 0 0 1 1 * #每年执行一次,此处为每年1月1日0时0分执行

@annually 0 0 1 1 * #每年执行一次,此处为每年1月1日0时0分执行

@monthly 0 0 1 * * #每月执行一次,此处为每月1日0时0分执行

@weekly 0 0 * * 0 #每周执行一次,此处为每周日0时0分执行

@daily 0 0 * * * #每天执行一次,此处为每天的0时0分执行

@hourly 0 * * * * #每小时执行一次,此处为每小时0分执行

[[emailprotected] ~]# tail -3 /etc/crontab

45 22 * * * root /sbin/reboot #每天22:45执行重启命令

*/10 * * * * root /usr/bin/who >>who.log #每隔10分钟执行一次命令who,将执行结果保存在who.log

0 0 1-7,10 * 1,3 root /bin/bash/data/lograta.sh #每月1至7号或十号或周一,周三执行脚本lograta.sh

(3)anacron系统

1)系统计划任务相关配置文件

/etc/crontab #系统计划任务

/etc/cron.d/配置文件

/etc/cron.hourly/#每小时的计划任务

/etc/cron.daily/ #每天的计划任务

/etc/cron.weekly/#每周计划任务

/etc/cron.monthly/脚本

2)作用:运行计算机关机时cron不运行的任务,CentOS6以后版本取消anacron服务,由crond服务管理

3)配置文件:/etc/anacrontab,负责执行/etc/cron.daily/etc/cron.weekly/etc/cron.monthly中系统任务。

[[emailprotected] ~]# cat /etc/anacrontab

# /etc/anacrontab: configuration file foranacron

# See anacron(8) and anacrontab(5) fordetails.

SHELL=/bin/sh

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

MAILTO=root

# the maximal random delay added to the basedelay of the jobs

RANDOM_DELAY=45

# the jobs will be started during thefollowing hours only

START_HOURS_RANGE=3-22

#period in days delay in minutes job-identifier command

15 cron.daily nice run-parts /etc/cron.daily

725 cron.weekly nice run-parts /etc/cron.weekly

@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

4)由/etc/cron.hourly/0anacron执行,当执行任务时,更新/var/spool/anacron/cron.daily文件的时间戳。

(4)管理临时文件

1)CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件

2)CentOS7使用systemd-tmpfiles-setup服务实现

(5)用户计划任务crontab命令

1)每个用户都有专用的cron任务文件,存放目录为/var/spool/cron/USERNAME

2)crontab命令用法:crontab[-u user] [-l | -r | -e] [-i]

用法同系统定时任务cron,只是在命令前不需要加执行的用户

选项说明:-l: 列出所有任务;

-e:编辑任务;

-r:移除所有任务;

-i:同-r一同使用,以交互式模式移除指定任务

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

[[emailprotected] ~]# crontab -e #编辑定时任务

no crontab for root - using an empty one

10 4 1 * * /data/scripts/backup.sh >/dev/null &>1

30 3 * * mon cat /proc/meminfo >>/tmp/meminfo

0 */3 * * * /bin/bash /data/scripts/who.sh>/dev/null &>1

[[emailprotected] ~]# crontab -l #查看定时任务

10 4 1 * * /data/scripts/backup.sh >/dev/null &>1

30 3 * * mon cat /proc/meminfo >>/tmp/meminfo

0 */3 * * * /bin/bash /data/scripts/who.sh>/dev/null &>1

[[emailprotected] ~]# crontab -r #移除所有的定时任务

3)限制用户cron使用权限(用法同at命令限制用户权限):

/etc/cron.allow和 /etc/cron.deny 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。

无论使用控制文件中的规定如何,根用户都总是可以使用cron。

如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。

如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron,其他用户可以正常使用cron

如果cron.allow和cron.deny都不存在时,实拒绝除root外的所有用户使用cron。

如果觉得《系统定时任务linux linux系统下定时任务(示例代码)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。