Linux系统中计划任务及其相关命令操作(at和crontab)

Linux系统中计划任务分为两种类型,一种是一次性的计划任务——at,一种是长期性计划任务——crontab,接下来分别讲述它们的作用及其使用场景。

目录

at:一次性计划任务

crontab:长期性计划任务


at:一次性计划任务

at是一个可以处理仅一次就结束的命令,不过要执行at时,必须要有 atd 这个服务的支持才行。在某些新版的Linux发行版中,atd 可能默认并没有启动,不过CentOS系统是默认启动的。

格式
at  时间

at -l                     # 查看已设置好但还未执行的一次性计划任务

atrm 任务序号    # 删除一次性计划任务

# 举例

[root@localhost ~]# at 23:59
warning: commands will be executed using /bin/sh
at> systemctl restart httpd
at> 
job 1 at Sun Jan 16 23:59:00 2022
Can't open /var/run/atd.pid to signal atd. No atd running?
[root@localhost ~]# at -l
1	Sun Jan 16 23:59:00 2022 a root
[root@localhost ~]# atrm 1
[root@localhost ~]# at -l
[root@localhost ~]# 

crontab:长期性计划任务

crontab这个命令设置的任务将会循环地一直执行下去,可循环的时间为分钟、小时、每周、每月、或每年等。crontab除了可以使用命令执行外,还可以编辑 /etc/crontab 文件。

长期计划任务需要使用crond服务程序,创建和管理在指定时间自动执行的任务(计划任务的最短时间间隔是一分钟)

使用crontab命令调用crond进程,设置按固定的周期重复执行预先计划好的任务

在Linux系统中:

  • /etc/crontab 是crond服务的配置文件
  • /var/log/cron 是crond服务日志文件
  • /var/spool/cron/root 是存放root用户的计划任务的文件
  • /var/spool/cron/用户名 是存放普通用户定义的计划任务的文件

同时为了避免安全性的问题,可以限制使用crontab的用户账号,可以使用的配置文件有:

  • /etc/cron.allow:将可以使用crontab的账号写入其中,不在这个文件内的用户则不可使用crontab
  • /etc/cron.deny:将不可以使用crontab的账号写入其中,未记录到这个文件中的账户可以使用crontab

以优先级来说,/etc/cron.allow要比/etc/cron.deny的优先级要高。选择上来说,这两个文件只需选择一个来限制就行。一般来说,系统默认保留/etc/cron.deny文件,我们可以将不想让它执行crontab的那个用户写入/etc/cron.deny中即可,一个用户一行。

[root@huyuxuan /]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=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

Linux系统中计划任务及其相关命令操作(at和crontab)_第1张图片


Linux系统中计划任务及其相关命令操作(at和crontab)_第2张图片


crontab的参数格式
分钟、小时、日期、月份、星期  命令

计划任务的相关命令

crontab -e                # 创建、编辑计划任务

crontab -l                 # 查看计划任务

# 删除计划任务
(1)crontab -e,然后给不用的计划任务加注释 (建议使用这种方法)
(2)crontab -r

注意:在crond服务的计划任务参数中,所有命令一定要用 绝对路径 的方式来写,如果不知道绝对路径,可以使用whereis命令来进行查询

# 举例

请添加一条计划任务,功能是每周一至周五的凌晨1点钟自动清空/tmp目录内的所有文件

[root@localhost ~]# crontab -e
# 此时会进入vi编辑界面让你编辑任务,每项任务都是一行
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l
0 1 * * 1-5 /usr/bin/rm -rf /tmp/*

最后提供一个可以检查crontab设置的网站:crontab执行时间计算 - 在线工具https://tool.lu/crontab/

你可能感兴趣的:(Linux,linux,运维)