目录
一.简介
systemd定时器是systemd服务管理器的一个重要组件,用于在Linux系统上执行预定的任务和作业。它可以替代传统的cron工具,并提供更多灵活性和功能。通过systemd定时器,用户可以轻松地设置计划任务,如定期备份、日志清理、定时运行脚本等。与cron相比,systemd定时器支持更多的时间单位,如秒、分钟、小时、天等,使用户能够更精确地控制任务的启动时间。
一个显著的优势是systemd定时器能够管理任务的依赖关系。用户可以设置任务之间的依赖关系,确保它们按照指定的顺序和条件执行。这对于需要多个任务协同工作的场景非常有用。此外,systemd定时器还支持任务的持久化,即使系统重启后,已设置的定时任务也会被保留,确保任务不会丢失。
另一个重要特性是systemd定时器可以与systemd单元(unit)一起使用。systemd单元是systemd中用于定义系统服务、挂载点、设备等的概念。通过将定时器与单元结合使用,用户可以更好地管理任务和服务之间的关系,实现更高效和灵活的系统管理。
总的来说,systemd定时器是一个功能强大且灵活的工具,有助于简化系统管理和自动化任务执行。它提供了更多选项和功能,使用户能够方便地设置和管理计划任务,提高系统的可靠性和效率。无论是个人用户还是企业用户,都可以从使用systemd定时器中获益。
二.创建定时器
1.单调定时器
第一步:创建编写任务脚本文件
输入vim /usr/local/local/bin/cs.sh命令添加以下内容
vim /usr/local/local/bin/cs.sh
#!/bin/bash
echo `date` >> /tmp/mylog.txt
第二步:编写一个定时器单元文件
输入命令cd /etc/systemd/system进入/etc/systemd.system目录,将定时器文件命名为boot_backup.timer保存在/etc/systemd/system目录中,并输入以下内容
cd /etc/systemd/system
vim boot_backup.timer
[Unit]
Description=mytimer
[Timer]
OnUnitActiveSec=3s
AccuracySec=1us
Unit=boot_backup.service
[Install]
WantedBy=multi-user.target
第三步:编写配套的服务单元文件
命名为boot_backup.service,保存在/etc/systemd/system,输入以下内容
vim boot_backup.service
[Unit]
Description=mytimer
[Service]
Type=simple
ExecStart=/bin/bash /root/s.sh
第四步:创建新的单元文件,重新装载单元文件
systemctl daemon-reload
第五步:设置开机自启动
systemctl enable boot_backup.timer
systemctl start boot_backup.timer
第六步:查看
tail -f /tmp/mylog.txt
2.实时定时器
实现步骤与上述单调定时器一样,只是将定时器单元文件修改即可,内容如下
[Unit]
Description=Run boot backup weekly
[Timer]
OnCalendar=sun,02:00
Persistent=true
[Install]
WantedBy=multi-user. target
3.cron安排周期任务
原文链接:https://blog.csdn.net/2303_77432012/article/details/138001452
(1)启动服务
systemctl start crond.service
crond服务的配置文件是在/etc/crontab里存储
Cron表达式是一个强大的时间定义工具,它允许您以非常具体的方式来安排任务的执行时间。以下是每个部分的详细解释:
秒(Second):这一部分允许您指定任务在哪一秒执行。使用*表示每一秒都执行,或者可以使用其他符号来指定具体的秒数或秒数范围。
分(Minute):在这一部分中,您可以设置任务在每小时的哪几分钟执行。例如,*/5 表示每五分钟执行一次,而3,7 表示在每小时的第3分钟和第7分钟执行。
时(Hour):这部分用于指定任务在哪一个小时执行。同样地,*代表每个小时,而6-8则表示早上6点到8点之间每小时的任务执行。
日(Day of Month):在这里,您可以设定任务在一个月中的哪一天执行。比如1表示每月的第一天,而*/2表示每月的偶数日期。
月(Month):这一部分让您可以设置任务在哪个月执行。*代表每个月,而5,7,8则表示在5月、7月和8月执行任务。
周(Day of Week):这里允许您根据星期几来安排任务。0代表星期天,而*则代表每天。
年(Year):这是一个可选字段,用于指定任务在哪一年执行。这通常用于需要精确年份的场景
例子:
0 17 * * 1- 5 周一到周五每天17:00
30 8 * * 1,3,5 每周一、三、五的8点30分
0 8-18 * * * 8点到18点整
0 12 */3 * * 每隔3天的12点整
(2)创建一个crond计划任务
crontab -e
*/2 * * * * ls
具体如下:
(3)查看
(4)到达指定时间
(5)查看任务详情
tail -n 30 /var/log/cron
结果如下:(周期性计划任务日志是放到了/var/log/cron
里边,tail -n 30 /var/log/cron
可以看一下/var/log/cron
最后30行的内容,图中圈中的两部分都是每分钟执行echo "Good"的结果。)
(6)删除cron计划任务
查看是否删除:
crontab -r
crontab -l
4.at工具安排一次性任务
原文链接:https://blog.csdn.net/2303_77432012/article/details/138001452
下载at,即可使用,指令如下
yum install -y at
(1)启动服务并设置开机自启动
systemctl start atd
systenctl enable atd
定义一个具体时间
at "21:15 2024-04-20"
任务内容为打印good
(2)查看
at -l
(3)查看任务内容
at -c 2
(4)删除该任务
at -r 2
三.总结
原文链接:https://blog.csdn.net/2303_77432012/article/details/138001452
Crond计划任务和at一次性任务的工作原理是通过系统服务来调度执行预先设置的命令操作。
Crond适合需要定期重复执行的任务,而at适用于只需要执行一次的任务。这两种机制为系统管理员提供了灵活的任务调度选项,以满足不同的自动化需求。
Crond计划任务
原理是基于守护 进程Crond,它会在后台运行并按照预设的时间间隔执行任务。Crond服务通过读取配置文件(如/etc/crontab或用户个人目录下的cron文件)来获取需要周期性执行的任务列表。每个任务都按照特定的格式来定义,包括分钟、小时、日期、月份和星期几等时间信息,以及要执行的命令。Crond服务会根据这些信息来确定何时运行相应的命令。
at一次性任务
原理则是基于atd服务。at命令允许用户在指定的日期和时间点执行一次预设的命令操作。要使用at命令,首先需要确保atd服务已经运行
在指定的日期、时间点自动的执行预先设置的一些命令操作,属于一次性计划任务
系统服务的名称:/etc/init.d/atd
设置格式:at [HH:MM] [yyyy-mm-dd]
atq命令:查询当前设置的at任务列表 同 at -l
atrm命令:删除指定任务编号的at任务 atrm 编号 同 at -d
at -c 任务号 查看计划任务的具体内容(和at计划任务文件/var/spool/at/以a开头的文件内容相同)
at任务结束,文件消失
Crond和at命令各自在不同的应用场景下发挥作用。
Crond的应用场景:
定期执行的任务:Crond主要用于周期性的任务,如每小时、每天、每周或每月定时执行的任务。例如,系统管理员可能会设置Crond任务来每晚备份服务器数据,或者每小时更新一次系统日志。
持续运行的系统:Crond适合在那些持续运行的系统中使用,因为它需要一个不断运行的守护进程来监控系统时间并触发任务。
自动化常规操作:对于需要自动化执行的常规操作,如检查磁盘空间、自动发送报告邮件等,Crond是一个非常合适的选择。
at命令的应用场景:
一次性任务:at命令适用于只需要执行一次的任务。例如,如果系统管理员需要在特定时间点执行一个脚本来处理大量数据,那么at命令将是一个理想的选择。
临时任务:当需要临时设置一个任务在将来的某个时间点执行时,at命令非常有用。这可能包括执行一次性的系统维护任务或运行一个只需执行一次的特殊命令。
非持续运行的系统:对于那些可能会关闭或休眠的系统,如笔记本电脑或桌面电脑,at命令可以在下次启动时执行预定的任务。
总的来说,Crond和at命令都是Linux系统中强大的任务调度工具,它们各自适合于不同类型的任务。Crond适合于定期重复的任务,而at则更适合于一次性的任务。了解这些应用场景可以帮助用户更有效地利用这些工具来简化和自动化日常的系统管理工作。