前言
systemd定时任务、crontab和at在Linux系统中都用于执行定时任务,但它们之间存在一些显著的区别。
首先,从管理方式上看,systemd是Linux系统的初始化进程,它不仅可以管理系统的各种服务,包括定时任务,还提供了更为集成和灵活的方式来处理定时任务。systemd的定时任务通过.timer文件来配置,可以很容易地管理和查看。而crontab则是一个独立的进程,专门用于定时任务的管理,其配置文件为用户的crontab文件,通过crontab -e
进行编辑。at命令则用于在指定时间执行一次性任务,其任务由atd守护进程管理。
其次,从灵活性来看,systemd的定时任务管理非常灵活,它可以根据时间、事件等多种方式进行配置。同时,systemd还支持依赖管理,可以方便地处理任务之间的依赖关系。crontab虽然不如systemd灵活,但它支持更多的配置选项,可以实现更为复杂的定时调度。而at命令主要用于执行一次性任务,其灵活性相对较低。
再次,从配置方式来看,systemd的定时任务配置文件以.timer为后缀,放置在/etc/systemd/system目录下,其配置格式较为简单明了。crontab的配置文件则为用户的crontab文件,通过特定的语法和格式来定义定时任务。而at命令则需要在命令行中指定执行时间和要执行的命令。
最后,从使用场景来看,systemd定时任务适用于需要高灵活性和依赖管理的场景,如系统级的服务调度和事件触发。crontab适用于周期性执行的定时任务,如每天备份日志文件等。而at命令则适用于需要在未来某个特定时间点执行一次性任务的场景。
综上所述,systemd定时任务、crontab和at各有其特点和使用场景,用户可以根据实际需求选择适合的定时任务管理工具。
systemd定时服务
systemd定时任务是使用systemd的服务管理器来设置和管理定时任务的方法。这主要通过systemd的定时器单元文件来实现,这些文件通常以.timer后缀结尾,并存储在特定的目录中,如/etc/systemd/system或/usr/lib/systemd/system。
定时器单元文件主要由几个部分组成,包括[Unit]和[Timer]等。在[Unit]部分,你可以指定定时器的基本配置,如描述和依赖关系。在[Timer]部分,你可以设置定时器的触发规则,例如定时器的启动延迟、间隔等。常用的配置项包括OnActiveSec、OnBootSec、OnCalendar和OnUnitActiveSec等。
要设置systemd定时任务,你需要创建一个timer文件,并在其中定义任务的触发时间和要执行的service单元。然后,你需要启动这个timer文件来激活定时任务。此外,你还需要确保对创建的timer和service文件进行授权,以便它们可以正确地运行。
1.创建一个shell脚本
创建一个mytime.sh脚本,在里面输出`date`,并且将其放在临时目录下
vim mytime.sh
#!/bin/bash
echo `date` >> /tmp/xiaj.txt
给其权限
chmod +x mytime.sh
2.创建.service和.timer文件
1)进入/etc/systemd/system目录
cd /etc/systemd/system
2)创建.service文件,以boot_backup.service为例
touch boot_backup.service
vim boot_backup.service
3)在boot_backup.service文件中编辑
[Unit]
Description=Backup boot
[Service]
Type=simple
ExecStart=/bin/bash /root/mytime.sh
ExecStart后面接的/root/mytime.sh是前面创建的shell脚本路径
4)创建并且编写.timer文件,以boot_backup.timer为例
vim boot_backup.timer
[Unit]
Description=Time to Run xiaj.txt for 3s
[Timer]
AccuracySec=1us
OnBootSec=3s #3秒运行一次
OnUnitActiveSec=3s #运行以后间隔三秒运行
Unit=/etc/systemd/system/boot_backup.service #.service路径
[Install]
WantedBy=timers.target
3.重新加载 systemd 守护进程的配置文件
systemctl daemon-reload
4.启动boot_backup.timer文件
systemctl start boot_back.timer
5.查看运行情况
systemctl status boot_backup.timer
6.再打开一个终端查看
再开一个终端后,输入如下命令查看
tail -f /tmp/xiaj.txt
如图,定时三秒刷新一次时间,定时任务设置完成。
systemd定时任务与Linux中传统的cron定时任务工具相比,具有一些不同的特点和使用方式。cron通过crontab文件来管理定时任务,而systemd则提供了更为集成和灵活的方式来处理定时任务,尤其是在处理系统服务和依赖关系方面。
总的来说,systemd定时任务是一个强大的工具,可以帮助你有效地管理和调度Linux系统中的定时任务。然而,使用它也需要一定的系统管理经验和对systemd的理解。如果你不熟悉这个工具,建议查阅相关的文档或寻求专业的帮助。
crontab
crontab是一种常见的定时任务调度工具,是Unix和类Unix系统中最常用的定时任务管理工具。它通过读取和解析每个用户的crontab文件来执行定时任务。crontab的任务配置相对于systemd来说可能稍显复杂,但它具有更多可配置项,提供了更灵活的配置方式。crontab默认只支持分钟级别精度的定时任务,并且其定时规则相对固定,对于复杂的需求可能需要额外的解决方案
1.创建一个shell脚本
vim xia.sh
编辑脚本
#!/bin/bash
echo "xia is handsome boy" >> /tmp/qy.txt #输出xia is handsome boy 到qy.txt文件
2.打开crontab编写内容
一般虚拟机会自带crontab服务,可以使用which crontab查看
使用crontab -e打开crontab
再在里面编写定时任务
crontab -e
* * * * * /root/xia.sh #每分钟执行一次xia.sh,*从左往右分别是分钟(0-59)、小时(0-23)、天(1-31)、月(1-12)、星期(0-6),这里五个星表示每分钟执行一次
可以使用crontab -l 来查看定时器任务
3.启动服务
systemctl start crond
4.查看运行状态
systemctl status crond
打开/tmp/qy.txt查看写入情况
tail -f /tmp/qy.txt
如图,每分钟输出一此xia is handsome boy,至此crontab定时任务成功
注:crontab定时器语法
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8/bin:/usr/local/sbin:/usr/local/bin:/root/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
at
at命令用于设定在未来某个时间点执行一次性任务。
使用at命令时,用户需要输入具体的执行时间,并随后输入要执行的命令或脚本。
设定好的任务会被加入到作业队列中,等待atd守护进程在指定时间执行。
at命令只能执行一次任务,如果需要循环调度某个工作,应该使用其他的定时任务工具。
1.创建shell脚本
vim q.sh
编写内容
#!/bin/bash
echo `date` >> /tmp/we.txt #输出时间到临时目录we.txt文件下
2.检查at服务
at
命令依赖于atd
服务。首先,你需要确保这个服务正在运行。你可以使用systemctl
来检查并启动服务
systemctl status atd
3.添加任务
将q.sh任务添加到队列:at任务将于下一分钟执行
at -f q.sh now + 1 minutes
4.查看是否添加成功
atq
5.查看执行结果
进入we.txt文件,查看是否输出
tail -f /tmp/we.txt
至此,本文完