Linux计划任务管理

之前已经学习了一些Linux的基础知识和关机方式与文件系统简介,今天来学习下Linux下的计划任务,因为这个功能自己搭建服务器还是用得上的,比如定期清理垃圾缓存、定期备份数据库和网站等等。

系统环境:Centos8

一、什么是计划任务

类似于windows的计划任务,Linux上也有对应的功能。比如在今天下午18:00执行关机操作,或者在每天00:00进行数据库备份任务。

二、LiNux下的计划任务

Linux下计划任务分两类:

  • 突发性的,只执行一次的任务
  • 例行性的,每隔一定时间执行的

三、atd仅运行一次的计划任务

使用at命令执行单一任务,看名字就大概知道这个命令的作用是在指定时间进行操作。

要使用at命令需要先启动atd这个服务,默认我这里是没有启用的。

# 查看服务运行情况
systemctl status atd

# 如果没有启动则手动运行,running则表示运行了服务了
systemctl start atd

● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2023-10-05 11:16:03 CST; 3 months 5 days ago
 Main PID: 1191 (atd)
    Tasks: 1 (limit: 49140)
   Memory: 428.0K
   CGroup: /system.slice/atd.service
           └─1191 /usr/sbin/atd -f

10月 05 11:16:03 localhost.localdomain systemd[1]: Started Job spooling tools.

at的使用方式: at [-mldv] TIME 参数说明:

  • -m 完成后发送邮件通知用户,前提是安装好邮件客户端并且配置正确的账号密码
  • -l 查看当前的任务与用户
  • -d 取消任务
  • -v 指定显示的时间格式

TIME 时间格式:

  • HH:MM :几点几分,12:00
  • HH:MM YYYY-MM-DD :具体日期的具体时间 ,13:00 2024-01-12
  • HH:MM[am|pm] [Month] [Date] 指定日期的时间,"04:30pm Mar 15"
  • HH:MM[am|pm] + number [minutes|hours|days|weeks], 08:30am + 30 minutes

执行步骤:

  • 1、执行 at [-mldv] TIME 然后进入shell模式
  • 2、在shell模式下定义要执行的任务
  • 3、通过快捷键 Ctrl + D保存并退出编辑模式
[root@localhost ~]# at now + 5minutes      # 指定在5分钟后执行
warning: commands will be executed using /bin/sh  # 默认在/bin/sh环境下执行
at> mkdir /root/123.txt                           # 可以输入多行命令操作
at>                                          # 快捷键Ctrl + D退出
job 7 at Thu Jan 11 10:34:00 2024

查看当前任务:at -l,每个任务有一个序号,后面删除任务通过序号删除即可。

[root@localhost ~]# at -l
7       Thu Jan 11 10:34:00 2024 a root

删除任务:at -d number,通过序号删除任务

[root@localhost ~]# at -d 7
[root@localhost ~]# at -l
[root@localhost ~]# 

简单说就是确定在具体的时间执行多个任务,通过at -l查看任务,通过at -d删除任务。需要注意的是建议配置好服务器的时间准确,参考之前的NTP时间服务器配置。

四、crond循环执行的计划任务

at适合于在指定的时间执行一次,但是有时候我们需要定期执行如备份数据库或者备份网站等定期计划任务,这时需要通过crontab来进行。

查看服务状态systemctl status crond,只有状态为running才是正常运行状态。

# 查看服务状态
systemctl status crond

# 手动启动服务,一般默认已经开启了
systemctl start crond

# 开机自启
systemctl enable crond

使用方法:crontab [-u username] [-l|-e|-r],然后会进入任务编辑模式,说明:

  • -u :只有root用户可以执行-u参数,给指定用户创建定时任务,默认是给自己创建定时任务
  • -l :查看定时任务
  • -e :编辑定时任务
  • -r :删除整个定时任务文件

实际上crontab是根据用户区分的,创建了定时任务会在/var/spool/cron/下的创建一个用户名称的定时任务文件。

示例:

# 创建定时任务,只在第一次执行时进行创建,后续对任务的修改都是同一份文件上修改
[root@localhost ~]# crontab -e

# 然后就进入了一个类似vim的编辑文件的界面,需要先按i进入编辑模式才能进行编辑
0 12 * * * echo 'world'

# 编辑完成按键ESC,然后输入:wq保存文件并退出

# 查看定时任务内容
crontab -l

# 删除所有定时
crontab -r

# 查看本地文件,但是不建议直接编辑,说明的确在目录下有一个文件,crontab -e就是编辑这个文件的
[root@localhost cron]# pwd
/var/spool/cron
[root@localhost cron]# ls 
chuck  root
[root@localhost cron]# cat root 
0 12 * * * echo 'world'
[root@localhost cron]# 

定时任务内容的格式:* 12 * * * echo 'world'

代表意义 分钟 小时 日期 月份 命令
数字范围 0-59 0-23 1-31 1-12 0-7 需要执行的命令

每一行为一个任务,使用空格分开。

除了上面的具体数字,还有一些特殊字符可以表示时间。

特殊字符 代表意义
*(星号) 代表任何时刻都接受的意思,0 12 * * * 表示每天的12点
,(逗号) 表示分隔时段意思,30 3,6 * * *,表示每天的3:30,6:30都执行任务
-(减号) 表示范围,* 8-10 * * *,表示每天的8点到10点
/n(斜线) n数字,表示每隔n单位间隔,*/5 * * * *,表示每隔5分钟

上面的数字或者特殊字符一定要写在对应的字段,否则可能效果与实际不一致呢。 示例:

# 下面示例为凌晨1点执行对应的脚本进行数据库备份,执行任务计划建议使用绝对路径
0 1 * * * /root/bak_sh/mysql_zabbix.sh
0 1 * * * /root/bak_sh/mysql_grafana.sh

删除一行任务可以通过crontab -e编辑进行删除,删除所有定时任务才使用crontab -r,不建议直接编辑/var/spool/cron/下的文件。现在一般使用较多的是crond这种方式。

总结:通过上面at命令定时执行一次任务,通过crontab定时有计划的执行任务,实现服务器管理,数据的备份或者数据的清理。

本文由 mdnice 多平台发布

你可能感兴趣的:(程序人生)