目录
前言(设置定时任务的作用)
在Linux系统中设置定时任务有诸多好处,包括自动化任务、提高效率、时间管理和实时监控等,这些有助于提高工作效率、减少手动操作、提高系统稳定性和安全性。话不多说,让我们看看如何实现设置定时任务吧!
一、使用systemd创建定时器
要使用systemd的定时器,关键是要创建一个定时器单元文件和一个配套的服务单元文件,然后启动这些单元即可。
1、创建单调定时器
单调定时器适合按照相对时间的计划任务管理,这里以一个三秒输出一次时间为例,要求开机(系统启动)后开始执行,自从第一次执行后每三秒都要执行一次。
- 编写一个配套的服务单元文件,输入以下指令可将其命名为mylog.service,保存在/ete/systemd/system目录中。
vim /etc/systemd/system/mylog.service
[Unit] Description=Backup boot [Service] Type=simple ExecStart=/bin/bash /root/mylog.sh [Install] WantedBy=multi-user.target
将上述内容复制粘贴进去,【ESC】退出,再输入【:wq!】保存退出即完成服务单元文件编写。
- 编写任务脚本文件,这里是一个简单的脚本。首先新建并打开一个文件
vim /root/mylog.sh
#!/bin/bash echo `date` >> /tmp/mylog.txt
将上述内容复制粘贴进去,【ESC】退出,再输入【:wq!】保存退出即完成脚本编写。
- 编写一个定时器单元文件,输入以下指令可将其命名为mylog.timer,保存在/ete/systemd/system目录中。
vim /etc/systemd/system/mylog.timer
[Unit] Description=Run boot backup weekly and on boot [Timer] OnUnitActiveSec=3s AccuracySec=1us Unit=mylog.service [Install] WantedBy=multi-user.target
同样将上述内容复制粘贴进去,【ESC】退出,再输入【:wq!】保存退出即完成定时器单元文件编写。
- 输入下列红色框中的指令,对照检查一下上述文件是否编写正确
- 由于创建新的单元文件,执行systemctl daemon-reload 命令重新装载单元文件
systemctl daemon-reload
- 分别执行以下命令使新建的定时器能开机启动,并启动定时器:
systemctl enable mylog.timer #开机自启定时器 systemctl start mylog.timer #启动定时器 systemctl status mylog.timer #查看定时器状态
-
出现如下图所示的界面即定时器启动成功
- 进入tmp临时目录,查看文件内容
cd /tmp tail -f mylog.txt
如下图所示每三秒显示一次时间即配置完成
-
如果出现以下情况:
1、先启动mylog.service服务,检查状态时出现绿色图标即可,
systemctl enable mylog.service #设置开机自启 systemctl start mylog.service #启动服务 systemctl status mylog.service #查看服务状态
如下图所示:
2、再启动一遍mylog.timer定时器。
systemctl enable mylog.timer #开机自启定时器 systemctl start mylog.timer #启动定时器 systemctl status mylog.timer #查看定时器状态
2、创建实时定时器
实时定时器适合按照日历时间的计划任务管理,这里也以一个定期备份任务为例,要求每周执行一次(如时间为周日2点),且上次未执行就立即执行。实现步骤与上述单调定时器一样,只是将定时器单元文件修改即可。其内容符合实时定时器,修改如下:
[Unit]
Description=Run boot backup weekly
[Timer]
OnCalendar=sun,02:00
Persistent=true
[Install]
WantedBy=multi-user.target
二、使用crontab安排定时任务
1、为什么要使用crontab安排定时任务
自动化管理:crontab
允许用户在 Linux 系统中设定定时任务,使系统能够自动执行一些重复性的工作,而无需人工干预。这对于需要定时备份、监控、发送邮件等任务来说,非常有用。
灵活性:crontab
提供了强大的定时功能,可以设定精确到分钟的任务执行计划。通过配置不同的时间参数,用户可以轻松地设定任务的执行频率,如每天、每周、每月或特定时间等。
安全性:通过 crontab
,用户可以以特定的用户身份执行任务,从而确保任务执行时的权限和安全性。这有助于防止未经授权的访问和操作。
资源管理:在 crontab
中,用户可以设定任务的优先级和资源限制,以确保系统资源的合理分配和有效利用。这有助于防止任务执行时占用过多的系统资源,影响其他任务的正常运行。
日志记录:crontab
执行的任务通常会有相应的日志记录,方便用户查看任务的执行情况、排查问题和进行性能优化。
总之,crontab
在 Linux 系统中扮演了自动化管理、定时执行、安全控制和资源管理的角色,为用户提供了一个方便、灵活且强大的周期性任务管理工具。
2、如何使用crontab
(1)安装crontab
yum install crontabs
(2)查看crontab的状态
service crond status
(3)设置为开机自启
chkconfig –level 35 crond on
(4)添加定时任务,进入编辑
crontab -e
进入之后按i进入编辑模式,例如加入如下命令:
30 1 * * * /usr/local/etc/rc.d/lighttpd restart
设置为每天的1:30重启apache注:命令时间格式 :
* * * * * command
分 时 日 月 周 命令
编辑完之后按Esc键后输入 :wq! 后退出
(5)重启crontab服务
service crond restart
(6)查看任务列表
crontab -l
由上图可以看出设置的定时任务已经添加成功
三、使用at安排定时任务
1.基本介绍
在Linux中,at
命令用于设置一次性定时任务,它允许用户从文件或标准输入中读取命令,并在将来的一个指定时间执行这些命令。
at
命令执行的任务只会在指定的时间运行一次,执行完毕后任务就从队列中移除,不会反复执行。
使用at
命令,首先需要有守护进程atd
在运行。
2.atd守护进程工作流程
在使用at命令前,要保证atd进程正常使用
具体步骤如下:
- 用户通过at命令来设定一个一次性定时任务,包括要执行的命令和具体的时间。这些任务会被添加到作业队列中。
- atd守护进程会定期(通常是每60秒)检查这个作业队列。它会查看队列中的每个任务,检查其设定的执行时间是否与当前时间匹配。
- 如果找到了一个匹配的任务,atd就会执行这个任务,即运行用户设定的命令。
- 任务执行完毕后,相关的文件或记录会被自动删除,这意味着这个任务不会再次被执行,除非用户再次使用at命令设定。
3.以下提供两种方式查看atd是否启动
1.使用systemctl命令 :未启动,可以使用
systemctl start atd
命令来启动,并确保其自动启动可以使用systemctl enable --now atd
命令。
systemctl status atd
atd守护进程正在运行,你将看到类似“active (running)”的状态信息。如果未运行,则可能看到“inactive (dead)”或其他状态信息。
2.查看进程列表: ps -ef是用来检查所有的进程,| grep atd是管道,有过滤作用,这样子就能保证只检测atd进程是否启动了
systemctl status atd
atd守护进程正在运行,你将看到与atd相关的进程信息。如果没有任何输出,则意味着atd可能没有运行。
4.at命令格式
at [选项][时间]
结束: (1)Ctrl+D结束at命令的输入
(2)取消at作业,可在atrm命令后跟atq命令输出的作业号,将该at作业删除
5.at命令用法介绍
在命令行中执行at命令进入作业设置状态。at后面跟时间参数,在执行任务的时间,可以是下面格式中任何一种。
(1)HH:MM: 某一时刻,如05:00 代表5:00 AM。如果时间已过,就会在第2天的这一时间执行。
(2)MMDDYY、MM/DD/YY或MM.DD.YY:日期格式,表示某年某月某天的当前时刻。
月日年英文格式:如January 15 2015,年份可选。
特定时间:midnight 代表12:00 AM;noon 代表12:00 PM;teatime 代表4:00 PM。
now +: 从现在开始多少时间以后执行,单位是minutes、hours、days或weeks。如now+3 days 代表命令应该在3天之后的当前时刻执行。
6.at命令应用
(1)使用at命令创建一个定时任务,早上5点重启系统:
(2)使用-f选项,at命令可以从指定的文件中读取命令内容,然后在指定的时间运行。例如,有一个名为mytimer.sh文件
(3)使用-1选项,可以列出当前用户(非root)所有使用at命令创建的还未运行或当前正在运行的任务,如果是root账号,将列出所有用户的任务:
atq 命令具有与命令“at-l”相同的功能:
(其中前面的4、5、6是任务的编号)
希望这篇文章能给您带来一些启发。如果您喜欢我们的内容,请记得点赞、分享和关注哦!我们下次再见!