system定时任务

本篇博客主要讲:如何创建systemd定时器?以及有关 crontab 和 at 的相关用法


目录

前言

创建systemd定时器

创建shell脚本

创建单调定时器 

crontab

crontab 介绍

crontab 用法详解

2.1 crond 服务安装

2.2 crontab 文件内容分析

2.3 crontab 命令用法

2.3.1 查看定时任务列表

2.3.2 编辑/创建定时任务

2.3.3 删除定时任务

2.3.4 其他 crontab 相关操作

at

命令格式

参数

时间

atd服务

总结


前言

在Linux系统中,定时任务是一项至关重要的功能,它允许用户在指定的时间自动执行各种任务。传统的Cron工具长期以来一直是实现这一功能的主要手段。然而,随着systemd的普及和发展,它也为用户提供了一个新的、强大的定时任务解决方案。
systemd定时器通过定义一个timer单元来创建定时任务,其灵活性、易用性和强大的功能使得它成为现代Linux系统中实现定时任务的理想选择。与Cron相比,systemd定时器具有诸多优势。首先,它可以限制任务使用CPU的额度,确保系统资源得到合理分配。其次,systemd定时器支持任务的拆分和相互依赖关系的创建,使得复杂的任务流程能够得到有效的管理。此外,它还具备自动生成日志的功能,配合systemd的日志工具,用户可以方便地查看和排错。
因此,掌握如何创建和管理systemd定时器对于Linux系统管理员和开发人员来说至关重要。

创建systemd定时器

创建shell脚本

1.创建一个mytimer.sh 脚本,并给他可执行权限

vim mytimer.sh
chmod +x mytimer.sh

2.在里面写入代码 

#! /bin/bash
echo `date` >> /tmp/mylog.txt

创建单调定时器 

 1.编写任务脚本 vim boot_backup,这里是一个简单的引导区备份脚本boot_backup,仅仅用于示范,内容如下:

#! /bin/bash
xfsdump -f /opt/dump_boot /boot -L dump_boot -M drive0

 给它可执行权限

chmod +x boot_backup

2.编写一个定时器单元文件,可将其命名为boot_backup.timer,保存在/etc/systemd/system目录中,内容如下:

[Unit]
Description=Run boot backup weekly and on boot
[Timer]
OnUnitActiveSec=3s
AccuracySec=1us
Unit=boot_backup.service
[Install]
WantedBy=multi-user.target

3.编写一个配套的服务单元文件,可将其命令为boot_backup.service,保存在/etc/systemd/system 目录中,内容如下:

[Unit]
Description=Backup boot
[Service]
Type=simple
ExecStart=/bin/bash /root/mytimer.sh

 4.由于创建新的单元文件,执行systemctl daemon-reload 命令重新装载单元文件。

5.分别执行以下命令使新建的定时器能开机启动,并启动定时器:

systemctl enable boot_backup.timer
systemctl start boot_backup.timer
systemctl start boot_backup.service

6.查看状态

systemctl status boot_backup.timer
systemctl status boot_backup.service

7.重新开个远程连接,查看mylog.txt文件

tail -f /tmp/mylog.txt


crontab

crontab 介绍

1,什么是 crontab?

Crontab 是一个在 Unix 和 Linux 操作系统上用于定时执行任务的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。Crontab 是 cron table 的缩写,cron指的是 Unix 系统中的一个后台进程,它用于执行预定的任务。

Crontab 文件包含一系列计划任务条目,每个条目都定义了一个任务的执行时间和要运行的命令或脚本。这些任务可以按照分钟、小时、日、月和星期等不同的时间单位进行安排。

crontab 用法详解

只有安装了 crond 服务以后 crontab 命令才能使用,crontab 命令按照指定的格式编辑定时任务保存在 crontab 文件中,crond 服务会每分钟定期查看 crontab 文件中的定时任务列表去执行任务。

2.1 crond 服务安装

检查系统是否安装了crond服务:

执行以下命令: 

systemctl status crond

如果显示 Unit crond.service could not be found.,则需要安装crond服务。

# crond 安装:
yum -y install crontabs
# 启动 crond 服务: 
systemctl start crond
# 关闭 crond 服务: 
systemctl stop crond
# crond设置开机自启动: 
systemctl enable crond
# 重新载入配置
systemctl reload crond
# 查看 crontab 服务是否已经加入了开机启动
chkconfig crond --list
# 加入开机自动启动
chkconfig crond on

2.2 crontab 文件内容分析

你可以执行以下命令来查看crontab文件的示例内容:

cat /etc/crontab

2.3 crontab 命令用法

2.3.1 查看定时任务列表

使用下面命令进行查看定时任务列表

[test@hecs]# crontab -l    # 查看定时任务列表
2.3.2 编辑/创建定时任务

实际上,在使用中,设置Crontab定时任务非常容易。只需切换到执行命令的用户,然后运行crontab -e命令,这将打开一个空白文件,你只需在其中输入要定时执行的任务即可。

[test@hecs]# crontab -e	# 编辑定时任务
#进入 crontab 编辑界面。会打开Vim编辑你的任务
 */10 * * * *   /home/test/test.sh

编辑完保存之后,就会在/var/spool/cron/目录生成一个名字叫test文件,这个文件就是test用户的crontab文件。

在crontab [选项] file 命令中, file 指的是命令文件的名字,表示将 file 作为 crontab 的任务列表文件并载入 crontab,若在命令行中未指定文件名,则此命令将接受标准输入(键盘)上键入的命令,并将它们键入 crontab, 例如:crontab -u test /root/jobs.txt ,表示用/root/jobs.txt 这个文件中的任务列表载入crontab。


2.3.3 删除定时任务
# 直接删除不提示
[test@hecs]# crontab -r 
或
# 删除前给出提示确认
[test@hecs]# crontab -i

执行上述命令后,会从/var/spool/cron目录中删除用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。

注意:执行删除命令后,即该用户下所有的定时任务都会被删除。如果只是想删除某个定时任务,用crontab -e命令编辑 crontab 文件删除某个任务即可。

2.3.4 其他 crontab 相关操作

(1)备份 crontab 文件

执行下面的命令可以备份当前的 crontab 文件

crontab -l > $HOME/mycron

(2)恢复丢失的 crontab 文件
如果不小心误删了crontab文件,假设你在自己的$HOME目录下还有一个备份,那么可以将其拷贝到/var/spool/cron/<username>,其中 是用户名。如果由于权限问题无法完成拷贝,可以用:crontab 其中,是你在$HOME目录中副本的文件名。

有些 crontab 的变体有些怪异,所以在使用 crontab 命令时要格外小心。如果遗漏了任何选项,crontab 可能会打开一个空文件,或者看起来像是个空文件。这时直接退出,不要按Ctrl-D,否则你将丢失 crontab 文件。


at

at是处理仅执行一次就结束的定时任务的命令,其守护进程是atd

命令格式

at [参数] [时间]

参数

  • -m  任务完成后会给用户发送邮件
  • -v  显示任务将要被执行的时间
  • -l  列出当前系统上该使用者所有的at计划,相当于atq
  • -d  取消一个at计划中的任务
  • -v  使用较明显的时间格式列出at计划中的任务列表

时间

1.HH:MM(小时:分钟),如果本地时间已经超过了所设置的时间,那么则会在第二天执行

2.HH:MM YYYY-MM-DD,强制在Y年M月D日的H时M分执行此计划

3.HH:MM today(tomorrow),在今天 (明天)的H时M分执行计划

4.时间后面加上am(上午)或者pm(下午)

5. now + n units,now是现在时刻(换成其他时间而也可以),n是数字,units是时间单位,指在某个时间点上再加上一段时间后才执行

请注意,如果不使用或者指定选项 -f 的话,at将进入交互模式

atd服务

大部分Linux发行版本中atd服务是默认开启的,如果关闭则需要打开atd才能执行at命令

#查看atd服务运行状态
systemctl status atd

#打开atd服务
systemctl start atd

#设置开机自启动
systemctl enable atd

#移除开机自启动
systemctl disable atd

控制文件  /var/spool/at/ 里面存放at定时任务的目录,每创建一个新的at任务,该目录下就会多一个文件,该文件里有其定时任务的详细信息,/etc/at.allow和/etc/at.deny。

当文件/etc/at.allow如果有时,则里面写进的用户才能使用at命令;如果没有时,则不在/etc/at.deny里的用户都可以使用at文件,如果两个文件都不存在,则只有root用户才能使用at命令


总结

Linux定时任务作为系统自动化管理的重要组成部分,通过crontab工具实现了任务的周期性执行。无论是定期备份数据、监控服务器状态,还是自动发送邮件通知,定时任务都发挥着至关重要的作用。通过配置crontab文件,我们可以轻松设定任务的执行时间、频率和命令,实现任务的自动化管理。Linux定时任务的灵活性使得它能够满足各种复杂的场景需求,提高了系统运维的效率和可靠性。同时,结合日志记录和错误处理机制,我们能够更好地监控任务执行情况,及时发现并处理问题。总的来说,Linux定时任务是一种强大而实用的工具,对于提高系统自动化水平和降低人工干预成本具有重要意义。

如果有问题,欢迎各位大佬指出,如果觉得还不错,赶快点赞收藏吧~~

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值