创建计划任务

时间:2022-11-22 07:50:44

主要命令

at

未来的某时间点 执行一次某任务

cron

周期性的运行某任务

at 命令

~ ~ ~ 相关文件

用户创建的 at 队列的存放位置

/var/spool/at

at 程序服务脚本文件

1、CentOS 7
  /usr/lib/systemd/system/atd.service

2、CentOS 6
  /etc/rc.d/init.d/at

注 : chkconfig 可以对/etc/init.d/ 目录下的系统启动时的服务进行管理控制

“白名单” 和“黑名单” 文件

1、/etc/at.deny

将相关用户放置在此文件中,则用户将不能使用 at 创建计划任务
此文件是安装 at 程序即生成

2、/etc/at.allow

将相关用户放置在此文件中,则用户可以创建 at 的计划任务
此文件是需要用户手动在 /etc/ 目录下创建

注:
1、两个文件对之前设置的 at 计划任务无效;
2、当创建了白名单之后,只有白名单里面的用户可以创建计划任务,且比黑名单的优先级要高;
3、当两个文件都不存在时,则只有root 用户可以执行 at 创建计划任务

~ ~ ~ 相关命令

管理 atd 服务

大家对 systemd 和 service 命令的使用肯定比较熟悉了,不多于赘述

systemctl status | restart | start | stop atd

service atd status | restart | start | stop

语法格式

at [options]… TIME

1、[options]

  • -v :显示版本信息
  • -l :列出 atd 队列中等待运行的作业及其编号,相当于atq
  • -d :删除指定的作业,相当于atrm
  • -c # :删除指定的作业,其中# 表示任务作业编号,用 at -l 即可查看
  • -f FILE :从指定的文件中读取有关 atd 的服务
  • -m :当任务完成之后,将给用户发送提示邮件,即使at 任务没有标准输出

注 : 作业执行命令的结果中的标准输出和错误以邮件发送给相关用户

2、TIME

  • HH:MM [yyyy-mm-dd] :时-分-年-月-日
  • noon,midnight,teatime(4pm)
  • tomorrow
  • now+#{minutes ,hours , days ,OR weeks}

示例

1、通过管道传输任务

[ root@scritp7 spool ]# echo "touch file" |at -m now+1minutes
    job 4 at Sun Sep  3 14:06:00 2017

[ root@scritp7 spool ]# at -l
    4   Sun Sep  3 14:06:00 2017 a root

2、从指定文件中读取及计划任务

at -f FILE TIME

3、交互式设置计划任务

[ root@scritp7 spool ]# at 14:12 2017-9-4
    at> echo "lilili"
    at> pwd
    at> <EOT>
    job 5 at Mon Sep  4 14:12:00 2017

注 :交互式执行,以Ctrl +d 结束

crond 命令

作用 :用来周期性的执行某任务,常在后台执行,从标准输入读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

~ ~ ~ 相关文件

程序包文件 : cronie

crond 命令来自此包

/usr/sbin/crontab

需要被执行的计划任务被读取到此文件中,然后,系统到了时间进行执行

crond 服务程序所在文件

即系统启动时,系统根据此目录下的文件来决定是否开启 crond 服务

1、CentOS 6
  /etc/rc.d/init.d/crond

2、CnetOS 7
  /usr/lib/systemd/system/crond.service

crond 计划任务是否执行,查看的日志文件

/var/log/cron

此文件将会显示已经执行过了的计划任务的

管理crond 的状态

service crond status
systemctl status crond

系统的计划任务的文件位置

主要是系统一些默认的计划任务

2、/etc/cron.d/ 配置文件
3、/etc/cron.hourly/ 每小时执行的任务脚本
4、/etc/cron.daily/ 每天都要执行的任务脚本
5、/etc/cron.weekly/ 每周都要执行的任务脚本
6、/etc/cron.monthly/ 每月都要执行的任务脚本
7、/etc/anacrontab 定义那些可能因为关机等情况而没有执行的计划任务怎么处理
8、/etc/cron.daily/logrotate

注 : 我们可以将一些规定要执行的任务放在这些目录之下,例如每天上课时间时,固定的时间点下载老师主机上面的脚本,当然,也可以直接在 /etc/crontab 文件中进行编辑

“白名单”和“黑名单” 文件

etc/cron.deny
tc/cron.allow
原理和atd 服务的原理一样,这里不再赘述

~ ~ ~ crond 计划任务设置

通过配置文件设置 : /etc/crontab

1、/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 执行用户 执行的计划任务

————————————————————————————————–

2、/etc/crontab 时间设置
相关说明**
1、特定值 : 给定具体时间
2、* : 表示每
3、离散取值 :#,#,#
4、连续取值 : # - #
5、在指定事件范围内定义步长 : /#: #即为步长。例如: */10 每10分钟小时
6、特殊表示法

@ @reboot Run once after reboot. #重启时
@yearly 0 0 1 1 * 每年
@annually 0 0 1 1 * 每年
@monthly 0 0 1 * * 每月
@weekly 0 0 * * 0 每星期
@daily 0 0 * * * 每天
@hourly 0 * * * * 每小时

7、每周的星期几 和 每月的第几天取 并集,其他的取交集

示例

1、每3小时执行一次任务

* 3/* * * * root wall “Good good study” ; echo “Fighting”

2、星期和天的关系

* * 5 , 6 * 1 - 3 root echo ” Cute ”
说明:星期和天去并集,即每月的5 ,6 号,以及每周的 星期 1 到 3 执行此任务

3、每天早上的 9点 10 分执行

10 9 * * * root reboot

4、如何在秒级别运行任务,每20秒运行一次

* * * * * root for min in 0 1 2 ; do echo “hi” ; sleep 20 ; done

注 : 在 /etc/crontab 文件中执行命令时,最好写上命令的路径

~ ~ ~ 用户cron

用户的计划任务的文件位置

/var/spool/cron/USERNAME

用户设置计划任务的方法

1、直接在 /var/spool/cron 文件里面进行编辑

格式同在 /etc/crontab 文件里面编辑计划任务一样

2、使用命令:crontab

root 也可使用此命令创建计划任务

1)格式
crontab [ - u user ] [ - l | - r | - e ] [ - i ]

  • -l : 列出所有任务
  • -e : 编辑计划任务
  • -r : 移除所有任务
  • -i : 与 -r 一起使用,以交互模式移除指定任务
  • -u :仅root 可用,指定用户管理cron任务

2)是crontab -e 编辑文件时,颜色显示
- 仅对当前用户有效
export EDITOR = vim

  • root 用户设置,对所有用户有效,将以上命令写入到文件中去,例如
    vim / etc/profile.d / env.sh
    export EDITOR = vim

3)示例
- root 用户修改其他用户创建的计划任务
  crontab -e -u USERname

~ ~ ~ anacron系统

作用

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

配置文件

/etc/anacrontab
负责执行/etc/cron.daily /etc/cron.weekly 等文件中因为关机而没有执行的计划任务

内容详解:

—————————————————————————————————–
RANDOM_DELAY=45 随机挑选没有执行的任务
START_HOURS_RANGE=3-22 此时间段内开机执行其他时间段内没有执行的任务
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly

说明:
1 5 cron.daily nice run-parts /etc/cron.daily
每天开机5分钟后执行/etc/cron.daily下的脚本
—————————————————————————————————–