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的工作情况如下:

  1. 寻找/etc/at.allow文件(管理较为严格的方式),只有写在这个文件中的使用者才可以使用at,没有在这个文件中的使用者不可以使用at(即使没有写在at.deny中)
  2. 如果/etc/at.allow不存在,就寻找 /etc/at.deny 这个文件(管理较为松散的方式),若写在这个 at.deny 的使用者则不能使用 at , 而没有在这个 at.deny 文件中的使用者,就可以使用 at 
  3. 如果两个文件都不存在,则只有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计划任务的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统管理10——进程和计划任务管理

linux中的进程于计划任务管理

Linux/Centos7系统管理之进程与计划任务管理

Linux——进程和计划任务管理

Fragment 中的计划任务将 getActivity 返回为 null

Linux系统之守护进程和计划任务