Linux--计划任务!

Posted handsomeboy-东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux--计划任务!相关的知识,希望对你有一定的参考价值。

linux中计划任务概述

设置某个时间来执行一些列命令实现任务,或者设置周期性的执行任务,例如提醒生日时间到了

linux计划任务种类

一、一次性的计划任务

由at命令设置一次性计划任务,注意要实现at命令必须要有atd这个服务才行,atd(这里的d表示守护进程,表示一直在后台运行的进程),事实上,我们用at这个命令产生要实现的任务,这个任务会加载进/var/spool/at目录下,然后等待atd这个服务的使用和执行
如果在at编写中的命令出现错误,at会默认发邮件给执行者,可在/var/spool/mail中查看

at 1018 2021-08-05 :输入此命令会进入一个计划表中,我们将我们想要执行的任务写入该
                       执行表并按Ctrl+d,系统就会在2021-08-05 1018这个时间段来执行这个计划任务
atq :查询已创建的一次性计划任务
at now +3min :两分钟后执行任务,后面的时间单位可以更换
atrm 任务号 :删除任务                   
[root@AIDEBOY ~]# at now +5min
at> touch whd
at> mv /root/whd /home<EOT>
job 7 at Thu May 13 14:59:00 2021
[root@AIDEBOY ~]# atq
7	Thu May 13 14:59:00 2021 a root         
[root@AIDEBOY ~]# atrm 7
[root@AIDEBOY ~]# atq
[root@AIDEBOY ~]# 

二、循环执行的计划任务

linux中用crontab这个命令来实现建立循环型计划任务,crontab命令建立任务后会记录在/var/spool/cron中

crontab -u :只有root才能执行这个任务,表示帮其他用户设置计划任务
crontab -l :查看crontab的任务内容
crontab -r :删除crontab内的所有计划任务内容
crontab -e :进入vim编辑界面,编辑计划任务
格式为:        分钟    小时   日期     月     周      命令串
时间的取值范围: 0-59   0-23   1-31   1-12    0-7
【周】中的0和7都表示星期天
时间的特殊符号:*表示该范围内的任意时间
              ,逗号表示表示多个时间点,比如【周】中1,3,5表示每周一、周三和周五
              -表示连续的时间点,如【日期】中15-19,表示每15到19号
              /表示指定时间间隔的频率,如【日期】中*/3,表示每三天,10-25/2表示10号到25号每三天执行一次
注意:后面的命令串中的命令最好用路径的方式表示

例子:编辑完跟vim编辑器一样wq退出即可

[root@AIDEBOY ~]# crontab -e
0 5-11 * * * /bin/rm -rf /var/www/html/*
#上午5点到晚上11点之间,每隔一小时清理/var/www/htmI目录-次
~                                                                                                                                                                                                                                                                                                                                                                                                              
#假如你女友Luxi的生日是5月22,你想5月21日23:59给她发一封信,信在/home/lover.txt
59 23 21 5 * mail Luxi < /home/lover.txt                                                                                                                             
~                                                                                                                                     
#每月每天凌晨3点30分和中午12点30分执行/tmp下的hello.sh脚本                                                                                                                                    
30 3 * * * /bin/sh /tmp/hello.sh
30 12 * * * /bin/sh /tmp/hello.sh                                                                                                                                     
~                                                                                                                                     
#每月每天早.上8点到下午18点每隔2小时的每30分钟查看系统时间                                                                                                                                    
30 8-18/2 * * /bin/date                                                                                                                                  
~                                                                                                                                     
                                                                                                                                  
-- INSERT --

注意:格式中没有几月几日且为星期几,例如本来想8月11号刚好是星期五执行任务

* * 11 8 5 命令串 :这里表示的可能为每8月内的每个星期5,而不是想要的8月11的星期5,与想要的规划不符

crontab的配置文件/etc/crontab,/etc/cron.d/

[root@AIDEBOY ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin        //执行文件的查找路径
MAILTO=root                               //执行任务发生错误时会发送邮件给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

黑白名单

为了安全性的问题,可以设置限制at和crontab使用的账户

  • 白名单:/etc/cron.allow和/etc/at.allow,默认两个文件是没有的,需要创建
    将可以使用at或crontab的账号写入其中,不在这文件内的用户则不可以使用at或crontab
  • 黑名单:/etc/cron.deny和/etc/at.deny
    记录在这文件内的账户则不可以使用at或crontab
    当两名单同时存在时,比较优先级白名单比黑名单优先,两种只会存在一种名单限制

以上是关于Linux--计划任务!的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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