配置systemd服务crontab服务以及at工具使用

目录

  • 什么是linux定时服务
  • crontab服务
  1.  创建shell脚本
  2. 编写定时任务
  3. 查看定时任务
  4. 启动服务和查看状态
  5. 使用tail查看日志
  • at命令
  1. at命令演示
  2. 查看命令结果
  3. 输出时间到指定位置
  4. 查看命令结果
  • 配置systemd服务(单调和实时定时器)
  1. 介绍
  2. 单调定时器配置
  3. 实时定时器配置
  • 总结

什么是linux定时任务?

在Linux系统中,定时任务扮演着至关重要的角色,它们允许用户在预定的时间自动执行特定的任务或命令。这些任务可以包括定期备份数据、发送邮件、分析日志等,从而极大地提高了系统的自动化程度和效率。在Linux中,有多种实现定时任务的方式,其中最为常见的是使用systemd、crontab以及at命令。

首先,systemd是一个强大的系统和服务管理器,它不仅能够管理系统进程和服务,还提供了定时任务的功能。通过创建以“.timer”结尾的文件,用户可以定义任务的执行时间和频率,systemd将负责在指定的时间触发这些任务。与cron相比,systemd定时任务具有更多的优点,例如可以设置CPU和内存的使用额度,限制任务对系统资源的消耗,同时支持任务的拆分和依赖管理,使得复杂的定时任务得以实现。

在使用systemd定时器时,用户需要创建一个服务单元文件(.service文件)并放置在/etc/systemd/system/目录下。该文件指定了定时任务的相关设置和命令。然后,用户可以使用systemctl命令来启动、停止、重启和管理这些服务。此外,systemd定时器还提供了丰富的日志功能,方便用户调试任务和查看任务调度情况。

其次,crontab是另一个在Linux中广泛使用的定时任务工具。它允许用户创建和管理计划任务,通过编辑crontab文件,用户可以定义任务的执行时间、要运行的命令或脚本等。crontab的优点在于其简单易用,且支持分钟、小时、日、月和星期等多种时间单位进行任务安排。然而,它对于系统资源的控制相对较弱,不如systemd灵活。

最后,at命令也是一种实现定时任务的方式。它允许用户从文件或标准输入中读取命令,并在未来的一个时间点执行这些命令。at命令的特点是只执行一次任务,非常适合于那些只需要在特定时间执行一次的任务。然而,它的使用相对有限,不如crontab和systemd广泛。综上所述,Linux系统提供了多种实现定时任务的方式,每种方式都有其独特的优点和适用场景。用户可以根据具体需求选择合适的方式来实现定时任务,从而提高系统的

充,共同构建一个高效、稳定的Linux系统环境。

crontab服务

Crontab是一个在Unix和类Unix操作系统中用于设置周期性被执行指令的工具。它允许用户创建和管理计划任务,以便在特定的时间间隔或时间点自动运行命令或脚本。

Crontab命令从标准输入设备读取指令,并将其存放于“crontab”文件中以供之后读取和执行。这些计划任务条目定义了任务的执行时间和要运行的命令或脚本,可以按照分钟、小时、日、月和星期等不同的时间单位进行安排。

Crontab文件中的每一行代表一个定时任务,格式如下:分钟 小时 日 月 星期 命令。每个字段都有特定的取值范围,例如分钟和小时字段可以是从0到59和0到23之间的任何整数,日期字段可以是从1到31之间的任何整数,月份字段可以是从1到12之间的任何整数,星期字段可以是从0到7之间的任何整数(其中0或7都表示星期日),命令字段则是要执行的命令或脚本的完整路径。

创建crontab定时器

首先创建一个shell脚本

​#! /bin/bash
echo "tao is a beautiful girl" >> /tmp/qy.txt

​
打开cronab编写定时任务
crontab -e

crontab 是 Unix、Linux 和类 Unix 系统中的一个命令,用于设置周期性被执行的任务。crontab 文件中的每一行都代表一项任务,其格式如下(编入五个星号这里表示每分钟执行一次)

前5个字段用于表示计划时间,数字取值范围:分钟(0~59),小时 (0~23),日期(1~31),月份(1~12),星期(0~7,0或7代表星期日)。尤其要注意以下几个特殊符号的用途:星号“*”为通配符,表示取值范围中的任意值;连字符“”表示数值区间;逗号“,”用于多个数值列表;正斜线“/”用来指定间隔频率。在某范围后面加上“/整数值”表示在该范围内每跳过该整数值执行一次任务。例如“*/3”或者“1-12/3”用在“月份”字段表示每3个月,“*/5”或者“0-59/5”用在“分钟”字段表示每5分钟。

查看定时任务

启动服务查看状态
systemctl start crond    #启动服务
systemctl status crond   #查看状态

使用tail查看日志,此处为一分钟输出一次
​tail -f /tmp/qy.txt
输入tail -f /tmp/qy.txt执行不成功,发现最开始编辑的.sh文件没有执行权限,输入chmod +x /tmp/qy.txt后再次输入tail -f /tmp/qy.txt代码执行成功
chmod +x /tmp/qy.txt
tail -f /tmp/qy.txt

每分钟运行一次已有两分钟运行。

自此crontab服务完成。

at命令

Linux at 命令是做一些定时操作,例如在0点启动某个服务。在windows系统中,windows提供了计划任务功能,在控制面板 -> 性能与维护 -> 任务计划, 它的功能就是安排自动运行的任务。 通过’添加任务计划’的一步步引导,则可建立一个定时执行的任务

使用AT命令时,用户需要指定任务的执行时间,并输入要执行的命令或脚本。系统会将该任务添加到作业队列中,并在指定的时间自动执行。需要注意的是,AT命令只执行一次任务,不会重复执行。

at命令演示

一分钟后将在线用户写到user.txt文件中

at> who >> user.txt   #按CTRL+D退出
查看

输出时间到指定位置

查看

配置systemd服务(单调和实时定时器)

介绍

systemd的单元类型主要包括服务单元(.service)、与开机启动有关的单元(.target)以及套接字单元(.socket)。每种类型的单元都有一个单元配置文件,systemd的管理工具systemctl通过读取这些单元配置文件来启动和管理相应的进程。

当systemd服务出现问题时,可能涉及依赖关系问题、权限问题以及服务日志分析等。可以使用systemctl命令查看服务的依赖关系、运行用户和组,以及查看特定服务的日志。此外,还可以使用systemctl命令重启服务以解决临时问题。

总的来说,systemd是一个功能强大且灵活的系统和服务管理器,它为Linux系统提供了高效、可靠的服务管理解决方案。

Timer定时器是一种用于定时执行任务的工具。它依赖时钟源进行计数,当达到预设值时触发事件。Timer定时器在多个领域广泛应用,如嵌入式系统、通信和自动化。它简单易用,但需注意任务执行方式可能是串行的。总体而言,Timer定时器是实现定时处理任务的有效手段。本文就会教大家如何使用timer定时器。

而定时器又分两种,分别为单调定时器与实时定时器,但本质并没有什么区别,只是单元文件不一样。

该处直接利用上述所自定义服务进行定时服务作为例子。

单调定时

关闭守护进程查看状态

setenforce 0   #关闭守护进程
getenforce     #查看状态

编写任务脚本

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

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

cd /etc/systemd/system   #进入/etc/systemd/system目录
vim boot_backup.service

[Unit]
Description=Backup boot
[service]
Type=simple
ExecStart=/home/boot_backup

[Unit] 部分是一个节(section),用于定义关于服务单元本身的元数据和其他通用设置。这些设置有助于 systemd 了解如何管理该服务。

Description=: 服务的简短描述。

[Service] 部分是用于定义服务单元的实际执行行为的。它包含了启动、停止、重启服务时所需的具体指令和配置。

ExecStart=: 定义启动服务时要执行的命令。

Restart=: 定义服务退出后是否重启,以及如何重启(例如 alwayson-failureon-abnormal 等)。

Type=: 定义服务的启动类型,例如 simple(默认值,立即启动服务)、forking(服务启动后会派生一个子进程,然后父进程退出)、dbus(等待 D-Bus 信号)、oneshot(执行一次任务然后退出)、dbus-notify(等待 D-Bus 信号后退出)等。

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

vim boot_backup.timer

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

[Install]部分用于定义服务单元的安装信息。这些信息决定了当使用systemctl enable命令时,服务单元文件应该被链接到哪个目标(target),以便在系统启动时自动启动该服务。

WantedBy=: 定义了哪些目标(target)需要这个服务单元。当这些目标被激活时,服务会被启动

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

分别执行以下命令是新建的定时器能开机启动,并启动定时器
systemctl enable boot_backup.timer
systemctl start boot_backup.timer
​
systemctl status boot_backup.timer

​

systemctl daemon-reload 是一个 systemd 的命令,用于通知 systemd 重新加载其服务配置文件。

systemctl start systemd.service 这个命令的意图是启动名为 systemd.service 的服务。

systemctl status systemd.service 这个命令用于查看 systemd 服务的状态。

执行tail -f /tmp/mylog.txt 

实时定时

实时定时器适合按照日历时间的计划任务管理,这里也以一个定期备份任务为例,要求
每周执行一次(如时间为周日 2 点),且上次未执行就立即执行。实现步骤与上述单调定时器
一样,只是将定时器单元文件(也就是后缀为.timer)修改即可。其内容符合实时定时器,修改如下:
 

[Unit]
Description--Run boot backup weekly
[Timer]
OnCalendarsun,02:00
Persistent--true
[Install]
WantedBy--multi-usectarget
用systemctl daemon-reload重新装载

总结

systemd定时任务作为systemd服务管理框架的一部分,为我们提供了强大且灵活的定时任务管理功能。它与服务管理紧密集成,使得我们可以方便地启动、停止或重启服务,同时安排一次性或周期性的任务。这种集成性使得systemd定时任务在复杂的系统环境中尤为出色。

而crontab作为Linux系统中传统的定时任务工具,凭借其简单易用的特点,一直深受用户喜爱。通过编辑用户的crontab文件,我们可以轻松地定义定时任务,并在指定的时间执行相应的命令或脚本。无论是日常的系统维护任务还是周期性的数据备份,crontab都能满足我们的需求。

此外,at命令为我们提供了一种简单快捷的方式来安排一次性的定时任务。它不需要编辑文件,而是直接在命令行中定义任务和时间,非常适合临时或一次性的需求。当我们需要快速安排一个任务在特定时间执行时,at命令无疑是一个理想的选择。

总的来说,Linux系统为我们提供了丰富多样的定时任务管理工具,使得我们可以根据具体的需求和场景选择适合的方式来设置定时任务。无论是需要周期性执行的服务管理任务,还是一次性的临时任务,我们都能在这些工具中找到合适的解决方案。通过合理利用这些工具,我们可以更加高效地管理Linux系统,提升工作效率。

看到此处便是情,点赞关注莫留情!

  • 46
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值