Linux计划任务
Posted wanao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux计划任务相关的知识,希望对你有一定的参考价值。
一次性计划任务
一次性计划任务只能执行一次,一般用于满足临时的工作需求。
负责at的服务atd
可以使用at命令实现该功能,使用at命令需要启用负责该任务的服务—atd。
[root@localhost Desktop]# systemctl restart atd [root@localhost Desktop]# systemctl enable atd [root@localhost Desktop]# systemctl status atd ● atd.service - Job spooling tools Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-04-30 11:23:24 CST; 14s ago Main PID: 4622 (atd) CGroup: /system.slice/atd.service └─4622 /usr/sbin/atd -f Apr 30 11:23:24 localhost.localdomain systemd[1]: Started Job spooling tools. Apr 30 11:23:24 localhost.localdomain systemd[1]: Starting Job spooling tools...
安全性问题
使用at产生所要运作的工作,并将这个工作以文本文件的方式写入/var/spool/at/目录内,该工作便等待着atd服务的取用与执行了。
为了系统的安全,可以使用/etc/at.allow与/etc/at.deny这两个文件来进行at的使用限制。加上这两个文件后,at的工作情况如下:
- 寻找/etc/at.allow文件(管理较为严格的方式),只有写在这个文件中的使用者才可以使用at,没有在这个文件中的使用者不可以使用at(即使没有写在at.deny中)
- 如果/etc/at.allow不存在,就寻找 /etc/at.deny 这个文件(管理较为松散的方式),若写在这个 at.deny 的使用者则不能使用 at , 而没有在这个 at.deny 文件中的使用者,就可以使用 at
- 如果两个文件都不存在,则只有root可以使用at指令
在一般的Linux发行版中,假设系统上的所有用户都是可信任的,因此系统通常会保留一个空的/etc/at.deny文件,这样允许所有人使用at指令。
at命令的使用
创建编辑计划任务:at 时间
[root@localhost Desktop]# at 12:30 at> reboot at> <EOT> 使用Ctrl+D结束编写计划任务 job 1 at Thu Apr 30 12:30:00 2020 [root@localhost Desktop]# echo "reboot" | at 12:30 使用管道符创建命令 job 2 at Thu Apr 30 12:30:00 2020
查看计划任务:at -l
[root@localhost Desktop]# at -l 1 Thu Apr 30 12:30:00 2020 a root 2 Thu Apr 30 12:30:00 2020 a root
删除计划任务:atrm 任务序号
[root@localhost Desktop]# atrm 2 [root@localhost Desktop]# at -l 1 Thu Apr 30 12:30:00 2020 a root
长期性计划任务
长期性计划任务可以周期性的、有规律的执行某些具体的任务,可以使用Linux系统中默认启用的cron服务。
安全性问题
用户使用crontab命令建立计划任务后,该项任务就会被记录到/var/spool/cron中,并以账号判别。
为了系统的安全性,可以如at相同限制使用crontab的使用者账号:
- /etc/cron.allow:将可以使用crontab的账号写入其中,若不在这个文件中的使用者不可使用crontab
- /etc/cron.deny:将不可以使用crontab账号的写入其中,若未记录在这个文件中的使用者则可以使用crontab
/etc/cron.allow比/etc/cron.deny优先级更高,两个文件只能选择一个限制,系统默认保留/etc/cron.deny。
crontab命令的使用
创建编辑计划任务:crontab -e
查看计划任务:crontab -l
删除计划任务:crontab -r
设置他人的计划任务:crontab -u
crond服务设置任务的参数格式:分时日月周!如果有些字段没有设置,则需要使用星号*占位。
注意:计划任务中的分字段必须有数值,绝不能为空或者是*号,日和星期字段不能同时使用,否则会产生冲突。
特殊符号的含义:
- *:任何时刻
- /:指定时间的间隔频率;*/10=每隔十分钟(位于分字段);0-23/2=每隔两小时
- -:代表一段时间范围:8-17=8号到17号(日字段)
- ,:分隔时段:6,10-13,20=6号,10号到13号,20号(日字段)
系统级别的计划任务
crontab -e是针对使用者的cron设计的,crontab实际是/usr/bin/crontab这个执行文件。如果是系统级别的计划任务只需要编辑/etc/crontab这个文件即可(/etc/crontab是一个纯文本文档)。
Linux下cron服务的最低侦测限制是分钟,它会自动每分钟读取一次/etc/crontab与/var/spool/cron中的内容。编辑/etc/crontab之后cron会自动执行(由于crontab是读取到内存中的,当修改/etc/crontab后不会马上执行,这时候重启crond服务试试)。
[root@localhost Desktop]# ls /var/spool/cron/root 用户级cron工作 /var/spool/cron/root
[root@localhost Desktop]# cat /etc/crontab 系统级cron工作 SHELL=/bin/bash 使用的shell接口 PATH=/sbin:/bin:/usr/sbin:/usr/bin 执行文件搜寻路径 MAILTO=root 若有额外的STDOUT,将数据email给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
分时日月周身份命令七个字段
可唤醒停机期间的工作任务
anacron
anacron 的存在是为了处理非24小时一直启动的Linux系统的crontab的执行,以及因为某些原因导致错过时间而没有被执行的工作。
anacron每小时被crond执行一次,然后anacron再去检测相关的计划任务有没有被执行,若有超过期限的任务就执行该任务,执行完毕或无需执行任何任务,anacron停止。
anacron会以预设一天、七天、一个月为期去侦测系统未执行的crontab任务,anacron通过读取时间记录文件timestamps来分析现在的时间和时间记录文件所记载的上次执行anacron的时间,两者比较后若发现差异,则表示在某些时刻没有执行crontab,此时anacron会开始执行未进行的crontab任务。
1 5 cron.daily nice run-parts /etc/cron.daily 执行流程
- 由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天;
- 由 /var/spool/anacron/cron.daily 取出最近一次执行 anacron 的时间戳;
- 由上个步骤与目前的时间比较,若差异天数为 1 天以上 (含 1 天),就准备进行指令;
- 若准备进行指令,根据 /etc/anacrontab 的设定,将延迟 5 分钟 + 3 小时 (看 START_HOURS_RANGE 的 设定);
- 延迟时间过后,开始执行后续指令run-parts /etc/cron.daily;
- 执行完毕后, anacron 程序结束。
由此得知,有时系统开机后,后约 1 小时左右系统会有一小段时间的忙碌,硬盘会跑个不停,因为 anacron 正在执行过去 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 里头的未进行的各项工作排程。
总结
以上是关于Linux计划任务的主要内容,如果未能解决你的问题,请参考以下文章