本篇博客主要讲:如何创建systemd定时器?以及有关 crontab 和 at 的相关用法
目录
前言
在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 相关操作
执行下面的命令可以备份当前的 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定时任务是一种强大而实用的工具,对于提高系统自动化水平和降低人工干预成本具有重要意义。
如果有问题,欢迎各位大佬指出,如果觉得还不错,赶快点赞收藏吧~~