linux-计划任务atcrontab

Posted 可乐卷儿

tags:

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


一、计划任务的分类

  • 一次性计划任务:计划任务只执行一次
  • 周期性计划任务:周期性的执行任务

二、一次性计划任务-at

1、at命令简介

at命令允许指定Linux系统何时运行脚本,at命令会将作业提交到队列中,指定shell在何时运行该作业。at的守护进程atd会以后台模式运行,检查作业队列来运行作业。atd守护进程会检查系统上的一个特殊目录来获取at命令的提交的作业。默认情况下,atd守护进程每60秒检查一次目录。有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业

2、at命令格式

在使用at命令的时候,一定要保证atd进程启动

at [ HH:MM] [yyyy-mm-dd] //创建一次性任务;若在任务内创建系统已存在的文件,会更改文件的创建时间为当前
ctrl+d   //结束at命令的输入
atq:查询一次性任务:查询没有完成的任务,完成时间之前
atrm id号:删除一次性的任务
/var/spool/at/:计划任务的存储目录
/var/spool/mail:到执行任务时间时,不会显示在前台进行,系统会发送一个邮件mail,进入存储目录查询

在这里插入图片描述
在这里插入图片描述

3、时间设置

at允许使用一套相当复杂的指定时间的方法

at now +2min:2分钟之后执行创建的任务
at teatime:默认代表当天下午四点执行任务
at teatime +3day:代表三天后的下午四点执行任务
at noon:默认代表当天中午12点
at May 30 2021:2021年5月30日执行任务
at 3pm:下午三点执行任务

4、实例

  1. 2天后晚上8点拷贝网卡配置文件到/op目录下,3天后中午12点再把拷贝的文件
/etc/sysconfig/network- scripts/ifcfg- ens33 //网卡配置文件
[root@localhost ~]$at 8pm +2day
at> cp -p /etc/sysconfig/network-scripts/ifcfg-ens33 /opt/ens33.bak
at> <EOT>
job 11 at Sat May 15 20:00:00 2021
[root@localhost ~]$at noon +3day
at> cp -p /opt/ens33.bak /etc/sysconfig/network-scripts/ifcfg-ens33
at> <EOT>
job 12 at Sun May 16 12:00:00 2021

在这里插入图片描述

三、周期性计划任务-crontab

1、命令简介

按照预先设置的时间周期重复执行用户指定的命令操作;执行此命令需要运行守护进程:crond,但是现在系统一般都是自动运行的。
主要配置文件
全局配置文件:/etc/crontab
系统默认的设置:/rtc/cron.*/
用户定义的设置:/var/spool/cron/用户

其中全局配置文件内容看一下:/etc/crontab
在这里插入图片描述

2、命令格式

在这里插入图片描述

字段取值
分钟0-59之间任意整数
小时0-24之间任意整数
日期1-31之间任意整数
月份1-12之间任意整数
星期0-7之间任意整数;*0或7代表星期日
命令要执行的命令或程序脚本;命令最好用绝对路径

时间数值的额数表示方法

符号含义
*表示该范围内的任意时间
,表示间隔的多核不连续时间点
-表示一个连续的时间范围
/指定间隔的时间评率

3、命令选项crontab

编辑周期性任务

-e:编辑周期性任务;打开vi编辑器,最好加上绝对路径
-l:查看周期性任务

修改周期性任务

-e:打开vi编辑器进行删除操作
-r:删除当前用户所有的任务;慎用!

超级用户root可以通过命令管理其他用户

-u 用户名 -e
-u 用户名 -l
-u 用户名 -r

4、实例

  1. 每月10日10点复制/etc/hostname 到opt目录下,并查看任务
    首先查询cp的绝对路径
    在这里插入图片描述
    crontab -e
    在这里插入图片描述
    crontab -l
    在这里插入图片描述
  2. 每三天的16点复制文件:0 16 *3/ * * /usr/bin/cp -p/erc/hostname /opt
  3. 0 0 1 * *:每天12点(0代表12点)
  4. 50 7 * * * :每天7点50
  5. 0 * */5 * * :每隔5天的每个整点
  6. crontad -u zhangsan -e:通过用户zhangsan创建任务计划

四、计划任务crontab执行.sh脚本

实验步骤如下,结合实例说明

  1. 新建一个目录(可以是你当前的项目,如果.sh脚本执行结果和你项目相关的话。如果是系统本身相关的,建议放在其他位置)
cd /opt 
  1. 在新建的目录下创建一个hell.sh文件内容:echo “hello world”
vim hello.sh
echo “hello world”

在这里插入图片描述
3. 运行脚本文件的两种方法

  • sh hello.sh【hello.sh可以没有x权限】
    在这里插入图片描述
  • 使用绝对路径运行脚本文件:/opt/hello.sh【需要赋予执行权限】
  • 赋予文件属主执行权限:执行chmod u+x hello.sh;
    在这里插入图片描述
    /opt/hello.sh 就变成一个命令
    在这里插入图片描述
  1. crontab -e:打开计划任务的列表
  2. 将内容写入计划任务表
*/1 * * * *  /opt/hello.sh (需赋予可执行权限的内容)

五、计划任务crontab权限设置

  • crontab默认所有用户都可以执行crontab设置计划任务。若有需要可以通过在/etc/cron.deny中添加用户来禁止该用户设置计划任务,也可以自行创建/etc/cron.allow来使用白名单

  • 黑名单cron.deny目录:/etc | grep “cron.deny”
    在这里插入图片描述

  • 当系统安排任务计划时

    • 查找allow文件–>查找deny文件
    • 若两个文件中存在同一用户,因为allow权限更高,所以还是允许该用户创建计划任务
    • 白名单是系统默认没有的,需要自己创建cron.allow//vim cron.allow

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

linux中进程和计划任务管理

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

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

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

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

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