【Linux】计划任务 at crond



前言

Linux系统中关于计划任务部分有两类,一类是一次性计划任务at,任务仅执行一次,另一类则是crond服务,可设定周期性计划任务。


一、一次性计划任务 at

1.1 安装at

# 使用本地ISO软件库安装at
[root@localhost ~]# yum install -y at

1.2 配置计划任务

[root@localhost ~]# at 10:25
at> yum makecache
at> <EOT>   # Ctrl + D
job 1 at Sun May 22 10:25:00 2022
Can't open /var/run/atd.pid to signal atd. No atd running?

此时发现,atd服务并未运行,检查一下状态并启动:

[root@localhost ~]# systemctl status atd
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
[root@localhost ~]# systemctl start atd
[root@localhost ~]# systemctl status atd
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2022-05-22 10:24:29 CST; 1s ago
 Main PID: 1634 (atd)
   CGroup: /system.slice/atd.service
           └─1634 /usr/sbin/atd -f

May 22 10:24:29 localhost.localdomain systemd[1]: Started Job spooling tools.
May 22 10:24:29 localhost.localdomain systemd[1]: Starting Job spooling tools...

再次设定一次性计划任务:

[root@localhost ~]# at 10:30
at> yum makecache
at> <EOT>              # Ctrl + D 结束任务内容
job 2 at Sun May 22 10:30:00 2022
[root@localhost ~]# 

[root@localhost ~]# echo "systemctl restart httpd" | at 11:00
job 3 at Sun May 22 11:00:00 2022
You have new mail in /var/spool/mail/root
[root@localhost ~]# at -l
3       Sun May 22 11:00:00 2022 a root
[root@localhost ~]# 

1.3 查看计划列表

[root@localhost ~]# at -l
2       Sun May 22 10:30:00 2022 a root

1.4 删除计划任务

删除一次性计划任务,可通过atrm命令删除对应序号的任务即可。

[root@localhost ~]# at -l
3       Sun May 22 11:00:00 2022 a root
[root@localhost ~]# atrm 3
[root@localhost ~]# at -l

二、周期性计划任务 crond

2.1 crond和crontab

crond是Linux系统用来定期执行命令或指定程序任务的一种服务或软件。
主要执行的计划任务有两类:

  • 系统自身定期执行的任务,如备份数据、轮询日志等;
  • 用户添加的任务,如定期同步时间、定期备份数据等。

crontab是crond服务用于设定具体计划任务的命令,crontab命令的守护进程便是crond。

2.2 命令

2.2.1 crontab常用命令

crontab常用的命令有:

crontab -l    # 查看计划任务
crontab -e    # 创建或编辑计划任务 
crontab -r    # 删除当前用户下的所有任务删除
crontab -u    # root账号更新其他用户的任务 

2.2.2 编辑计划任务

在使用crontab -e在对计划任务创建或编辑时,此时会进入到文件编辑窗口下。
此时在文件内编辑加上具体的计划任务(时间周期、执行程序)即可。
这里放一条计划任务:

57 11 * * * /usr/sbin/logrotate -f /etc/logrotate.d/log-file &>> /dev/null

每一块区域具体的含义可见下面展示信息:

# 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

从而可知,上文中放置的计划任务表示的是每天的11点57分执行一次logrotate日志轮转操作(日志切割备份)。

另一个示例:
在这里插入图片描述
表示的是每周1、3、4的3:25执行tar压缩操作。

里面包含了一些特殊符号,具体的含义为:

  • 逗号(,)来分别表示多个时间段,例如上面的“1,3,5”表示周一、周三和周五
  • 减号(-)来表示一段连续的时间周期,例如字段“日”的取值为“12-15”时表示某月份的12~15日
  • 除号(/)表示执行任务的间隔时间,例如“/2”表示每隔2 分钟执行一次任务
  • 芯号(*)表示取值范围内所有数字,例如月份字段 “ * ”表示所有月份,即1-12月,每个月

2.3 注意点

1、在crond服务的计划任务中,需要执行的命令部分一定要用绝对路径的方式来写,若不知道绝对路径,可用whereiswhich命令进行查询

[root@localhost ~]# whereis locate
locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
[root@localhost ~]# which locate
/usr/bin/locate

2、每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,该文件是不可直接编辑的,只可以用crontab -e来编辑
3、新创建的cron job不会立马执行,至少要等2分钟才能执行,可重启crond服务来立即执行

systemctl restart crond

4、%在crontab文件中表示“换行”,因此假如脚本或命令中含有%,需要使用\%来进行转义

2.4 黑白名单机制

/etc/at.{allow, deny}
/etc/cron.{allow, deny}

*.deny (黑名单)默认存在,当没有白名单时,黑名单里的用户不能使用计划任务;
*.allow (白名单)默认不存在,若白名单存在且里面没有标明用户,则只有root可以使用计划任务;若白名单内有用户列表,则只有列表中的用户可以使用计划任务;
若黑白名单都不存在,则只有root可以使用计划任务。

[root@localhost ~]# ls /etc/*.deny
/etc/at.deny  /etc/cron.deny  /etc/hosts.deny
[root@localhost ~]# ls /etc/*.allow
/etc/hosts.allow
[root@localhost ~]# cat /etc/at.deny

[root@localhost ~]# cat /etc/cron.deny
[root@localhost ~]# 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值