计划任务的方式可以有两种:
一种是 例行性 的,即每隔一定周期要办的事项一种是 突发性 的,即做完之后就没的事项在 Linux 中实现这两个功能就要使用到 at 和 crontab 这两个命令:
at:at 是个可以处理仅执行一次就结束的命令,不过要执行 at 时,必须要有 atd 这个服务的支持才行crontab:crontab 这个命令所设置的任务将会循环地一直执行下去,crontab 除了可以使用命令执行外,亦可以编辑 /etc/crontab 来支持,而至于让 crontab 可以生效则是 crond要使用单一计划任务时,Linux 必须要有负责这类计划任务的服务,那就是 atd 服务。使用
yum -y install at然后手动启动它:
systemctl restart atd # 重新启动 atd 这个服务 systemctl enable atd # 让这个服务开机就启动 systemctl status atd # 查看 atd 目前的状态使用 at 这个命令来产生所要运行的任务,并将这个任务以文本文件的方式写入 /var/spool/at/ 这个目录内,该任务便能等待 atd 这个任务的使用与执行了。 at 命令的语法:
at [-mldv] time选项与参数:
-m:当 at 的任务完成后,即使没有输出信息,也发 email 通知使用者该任务已经完成-l:at -l 相当于 atq,列出目前系统上面的所有该使用者的 at 计划-d:at -d 相当于 atrm,可以取消一个在 at 计划中的任务-v:可以使用较明显的时间格式列出 at 计划中的任务列表-c:紧接任务号码,可以列出后面接的该项任务的实际命令内容time:时间格式,定义执行 at 命令的时间,格式有: HH:MMHH:MM YYYY-MM-DDHH:MM[am|pm] [Month] [Date]HH:MM[am|pm] + number [minutes|hours|days|weeks]:如 now + 5 minutees,5分钟后执行如使用 at 命令在5分钟之后发送 /root/.bashrc 到自己的邮箱:
[admin@localhost ~]$ at now + 5 minutes at> /bin/mail -s "testing" admin < /root/.bashrc at> <EOT> # 输入 [ctrl] + d注意:
使用 at 时进入 at shell 的环境来让用户执行任务命令,所以最好就是使用 绝对路径 来执行命令,因为 at 在运行的时候,会跑到当前执行 at 命令的那个工作目录中执行。因为 at 的执行与终端环境无关,其所有的标准输出、标准错误输出都会发送到执行者的 mailbox 中,所以比如执行要在 at 中执行 echo 命令,在终端也就看不到任何信息,此时可以改变数据流实现,如 echo "Hello" > /dev/tty1at 任务独立出 bash 环境,直接交给系统的 atd 程序来接管,所以当执行 at 的任务之后就可以立刻脱机,剩下的工作就完全交给 Linux 管理。如果想要指定任务在系统比较闲的时候才执行,此时就可以使用 batch 命令,而 batch 命令其实就是利用 at 来执行命令的,它当CPU的任务负载小于 0.8 的时候,才执行你的工作任务,使用 batch 的语法与使用 at 的类似。
任务负载的意思是:CPU 在单一时间点所负责的任务数量,而不是CPU的使用率,如有一个程序需要一直使用 CPU 的运算功能,此时 CPU 的使用率可能达到 100%,当它的任务负载只是趋近于 1,如果有两个程序同时运行,此时任务负载就变成 2
循环执行的计划任务是由 cron 这个系统服务来控制的。这个系统任务是默认启动的。
我们可以限制 crontab 的用户账号,可以使用的配置文件有(at 命令也有):
/etc/cron.allow:将可以使用 crontab 命令的用户账号写入其中,该文件作用优先于 /etc/cron.deny 文件/etc/cron.deny:将不可使用 crontab 命令的用户账号写入其中当用户使用 crontab 命令建立计划任务之后,该项任务就会被记录到 /var/spool/cron 当中,而且是以账号作为判断依据,举例,admin 用户使用了 crontab 后,它的任务就会被记录到 /var/spool/cron/admin 中,crontab 的语法如下:
crontab [-u username] [-l|-e|-r]选项与参数:
-u:即帮其他使用者建立、删除 crontab 计划任务,只有 root 才能执行该任务。-e:编辑 crontab 的任务内容-l:查看 crontab 的任务内容-r:删除所有的 crontab 的任务内容当用户输入 crontab -e 命令时,就会进入到 vim 的编辑界面,然后以一行一个任务来编辑,而每项任务的格式都具有六个字段,它们的意义分别为:
分钟:0~59小时:0~23日期:1~31月份:1~12周:0~7,其中 0 和 7 都表示星期天的意思命令:需要执行的命令同时,还有下面这些特殊字符:
*:表示任何时刻都接受的意思,:代表分隔时段的意思,如 0 3,6 * * * command,就表示执行的任务时间点在 3:00 和 6:00-:代表一段时间范围内,如 20 8-12 * * * command,8点到12点之间的每个小时的20分钟执行/n:n 代表数字,即每隔 n 个单位间隔,如 */5 * * * * command,每5分钟执行一次一般来讲:
个人化的操作使用 crontab -e,这样能够保障命令操作不被看到(/etc/crontab 文件谁都能看到)系统维护管理和固定每小时、每日、每周执行的特别任务都应该使用 vim /etc/crontab 放置到 crontab 中集中管理较好。自身开发的软件如果最好就是使用 vim /etc/cron.d/newFile,使用全新的配置文件,并且放置到 /etc/cron.d/ 目录内即可/etc/crontab 是一个纯文本文件,可以使用 root 的身份编辑该文件,基本上,cron 这个服务的最低检测限制是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /etc/cron.d/ 里面的数据内容。 /ect/crontab 文件的内容其实与使用 crontab -e 时输入的内容大致一样,多出了以下几个地方:
MAILTO=root:将标准输出,标注错误输出的信息发送到某个用户的邮箱,默认就是发送到 root 用户PATH=...:执行文件路径如果服务器有个任务是定期循环执行的,但不巧的是当时间段服务器发生了一些状况比如停电之类的,导致该循环任务无法执行,此时就需要依靠 anacron 这个命令了,该命令可以主动帮助执行时间到了但却没有执行的任务。
anacron 的目的就是处理非24小时运行的 Linux 系统所执行的 crontab,以及因为某些原因导致的超过时间而没有被执行的任务。anacron 实际是一个程序,这个程序在 CentOS 当中已经进入 crontab 的任务列表,从而每小时就会执行一次,以下列出工作流程来了解一下 anacron 与 crond 的关系:
1、crond 会主动读取 /etc/crontab、/var/spool/cron/*、/etc/cron.d/* 等配置文件,并根据其时间的设定去配置各项计划任务2、根据 /etc/cron.d/0hourly 的设置,会主动去 /etc/cron.hourly/ 目录下,执行所有在该目录下的执行文件3、其中 /etc/cron.hourly/0anacron 会主动每小时执行 anacron,并调用 /etc/anacrontab 的配置文件4、根据 /etc/anacrontab 的配置,根据每天、每周、每月分析 /etc/cron.daily/、/etc/cron.weekly/、/ect/cron.monthly/ 内的执行文件,以执行固定周期需要执行但没能执行的命令也就是说,如果你每周日需要执行的操作是放置在 /ect/crontab 的话,那么该操作只要过期了就不会重新执行,但假如放置在 /ect/cron.weekly/ 目录下,那么就一定会执行,比如关机一周再开机,那么在开机后的数小时内任务就会被主动执行。