Linux计划任务管理以及创建systemd定时器

前言

systemd 是 Linux 系统中用于初始化系统(system and service manager)和服务管理的守护进程。它取代了传统的 init 系统,并提供了许多强大的功能来管理运行中的系统和启动过程。通过 systemd,系统管理员可以更轻松地管理、监控和控制系统的各个方面,从而提高了系统的稳定性和可靠性。此外,systemd 还提供了大量的命令行工具(如 systemctl)来与系统服务和守护进程进行交互。

一、什么是systemd定时器

systemd定时器是systemd系统和服务管理器中的一个功能,它允许用户设置定时任务,在特定的时间间隔或特定的时间点自动执行某些操作。这些定时任务通常与systemd服务单元(.service文件)相关联,当定时器触发时,会启动或重启相应的服务。

systemd定时器以.timer为后缀名的单元文件形式存在,用户可以在这些文件中定义触发时间、触发间隔以及要执行的服务等。systemd定时器可以是单调定时器,也可以是基于实时时钟的定时器。单调定时器是从某个特定时间点(如系统启动或定时器单元被激活)开始计算的,而实时时钟定时器则是基于墙上的实时时钟时间。

systemd定时器的主要优点包括:

灵活性:可以设置单次触发、周期性触发或基于日历事件的触发。

集成性:与systemd服务单元紧密集成,易于管理和监控。

依赖性管理:可以定义定时器之间的依赖关系,确保任务的执行顺序。

日志记录:systemd的日志功能可以记录定时器的活动和服务的执行情况,便于故障排查。

systemd定时器在Linux系统中广泛应用于各种定时任务,如定期清理日志文件、定时备份数据、周期性执行系统维护任务等。通过使用systemd定时器,用户可以方便地设置和管理这些任务,提高系统的自动化程度和运维效率。

二、什么是单调定时器

单调定时器是从一个特定的时间(如系统启动或systemd服务单元执行的开始时间)开始,过一段时间后触发的一种定时器。在Linux的systemd系统中,单调定时器是以.timer为后缀名的单元文件,用于控制.service文件或事件。所有的单调计时器都遵循一定的形式,如OnTypeSec=,而OnBootSec和OnActiveSec是常用的单调定时器。单调定时器的主要应用场景包括嵌入式系统、网络通信、多媒体和游戏等各个领域,用于控制硬件外设的工作时间、维护网络连接状态、确保音视频播放的同步以及实现游戏中的计时和倒计时等功能。

总的来说,单调定时器是一种非常实用的工具,能够在各种系统和应用中实现精确的时间控制和管理。如需更多关于单调定时器的信息,建议查阅计算机领域的专业书籍或咨询相关领域的专家。

三、systemd服务

systemd服务是在Linux系统中使用systemd初始化系统来管理的单个服务或守护进程的实例。这些服务可以是任何长时间运行的进程,例如Web服务器、数据库、SSH守护进程等。每个systemd服务都由一个.service单元文件定义,该文件告诉systemd如何启动、停止、重启以及监视该服务。

systemd服务的特点

  1. 定义明确:服务通过.service文件明确定义,该文件通常位于/etc/systemd/system//lib/systemd/system/目录下。

  2. 依赖管理.service文件可以指定其他服务作为启动依赖项,确保在启动某个服务之前先启动其他必要的服务。

  3. 自动重启:如果服务意外退出,systemd可以配置为自动重启它。

  4. 状态检查systemd可以检查服务的运行状态,并报告服务是否正在运行、是否失败或是否遇到其他问题。

  5. 日志集成systemd的日志功能(如journald)可以捕获服务的输出,并提供集中的日志查看和管理工具。

  6. 定时器:服务可以配置为在特定时间或间隔内自动启动或执行某些任务。

  7. 用户服务:除了系统级的服务外,systemd还支持用户级的服务,这些服务在用户登录会话中运行。

systemd服务管理命令

管理systemd服务通常使用systemctl命令。以下是一些常用的systemctl命令:

  • 启动服务systemctl start 服务名
  • 停止服务systemctl stop 服务名
  • 重启服务systemctl restart 服务名
  • 重新加载服务配置systemctl reload 服务名
  • 查看服务状态systemctl status 服务名
  • 使服务在系统启动时自动运行systemctl enable 服务名
  • 禁止服务在系统启动时自动运行systemctl disable 服务名
  • 查看所有服务的状态systemctl list-units --type=service

自定义systemd服务

要创建一个自定义的systemd服务,你需要编写一个.service文件,描述服务的行为。然后,你可以使用systemctl命令来管理这个服务。

四、Linux计划任务管理

1.crond计划任务概述

什么是计划任务,计划任务类似于我们平时生活中的闹钟。
Linux系统的计划任务服务crond可以满足周期性执行任务的需求。
crond进程每分钟会处理一次计划任务, 计划任务主要是做一些周期性的任务目前最主要的用途是定时备份数据

计划任务分为以下两种情况:

系统级别的定时任务

用户级别的定时任务

2、crond配置文件详解

/etc/crontab        //crontab配置文件

/etc/cron.deny      //该文件中所列用户不允许使用crontab命令

/var/spool/cron/*   //所有用户定时文件都存放此目录,文件以用户名命名

/var/log/cron       //定时任务执行后的日志文件,可用来回溯

3. crond计划任务管理

crond任务管理

crond时间含义

crond编写示例

crond书写规范

4. crond配置编写实例

5. crond计划任务调试

1.调整任务每分钟执行, 检测是否是否正常, 有些任务不要频繁执行

2.调整系统时间然后在检测任务, 生产不建议直接使用此方式

3.执行脚本, 将脚本执行输出写入指定日志文件, 观察日志内容是否正常

4.注意一些任务命令带来的0问题echo “wangqing” >>/tmp/test.log &>/dev/null

5.命令使用绝对路径, 防止无法找到命令导致定时任务执行故障

6.查看/var/log/cron日志进行调试

五、at实行一次性计划周期

1.查看at 服务是否安装

chkconfig --list | grep atd

systemctl list-unit-files | grep atd

2.查看服务是否在运行

service atd status或systemctl status atd

3.执行一次性任务

使用at now命令,输入要输的命令之后按下Ctrl+D

这个命令会在当前时间执行一次性任务,将字符串"hello "追加到/tmp/aa.txt文件中

4.指定时间执行一次性任务

输入at 时间

在15:20查询字符串“test”

在没有执行这个任务之前可以用atq命令来查看系统有没有执行工作任务

六、创建单调定时器

1、关闭守护进程

进入root运行

setenforce 0或sudo setenforce 0

 2、查看状态

运行代码查看getenforce

 3、编辑脚本

通过vim在systemd_test.sh文件中编辑脚本
#! /bin/bash
while true
do
echo data >> /root/systemd_test.sh
sleep 2
done
并通过cat systemd_test.sh将脚本输出到终端

 4、编辑systemd.service文件

使用vim文本编辑器来编辑位于/etc/syste md/system/ 目录下的systemd.servic e 文件
使用cat 命令来显示/etc/systemd/syste m/目录下名为systemd.service的文件内容。cat 命令用于连接并打印文件的内容到终端。

 [Unit] 部分是一个节(section),用于定义关于服务单元本身的元数据和其他通用设置。这些设置有助于systemd了解如何管理该服务。
Description=:服务的简短描述。
[Service] 部分是用于定义服务单元的实际执行行为的。它包含了启动、停止、重启服务时所需的具体指令和配置。
ExecStart=:定义启动服务时要执行的命令。
Restart=:定义服务退出后是否重启,以及如何重启(例如always、on-failure、on-a bnormal 等)。

Type=:定义服务的启动类型,例如 simple(默认值,立即启动服务)、forking(服务启动后会派生一个子进程,然后父进程退出)、 dbus (等待D-Bus信号)、oneshot(执行一次任务然后退出)、dbus-notify(等待D-Bu s 信号后退出)等。
[Install]部分用于定义服务单元的安装信息。这些信息决定了当使用systemctl enab le命令时,服务单元文件应该被链接到哪个目标(target),以便在系统启动时自动启动该服务。
WantedBy=:定义了哪些目标(target)需要这个服务单元。当这些目标被激活时,服务会被启动。

 5、查看目录并将systemd_test.sh转移到 /home目录下

通过ls查看当前目录中的文件和子目录
在通过mv systemd_test.sh/home将当前目录下的systemd_test.sh文件移动到/hom e目录下
然后通过ls或者ls/home代码查看是否转移成功

 6、运行并启动systemd服务

systemctl daemon-reload是一个syste md 的命令,用于通知systemd重新加载其服务配置文件。
systemctl start systemd.service 这个命令的意图是启动名为systemd.servic e 的服务。
systemctl status systemd.service这个命令用于查看systemd服务的状态。

 当出现错误时

 查/home/systemd_test.sh脚本文件是否存在,并且是否具有正确的执行权限。你可以使用Is-1/home/systemd_test.sh来检查文件权限,并使用 chmod +x /home/systemd_test.sh来添加执行权限(如果必要的话)。
另外,你可能还需要检查脚本的内容,确保它没有错误,并且能够在当前的系统环境下正确运行。
最后,由于这个服务目前是disabled 的,即使你解决了脚本问题,服务也不会在系统启动时自动运行。如果你想要它在启动时运行,你需要使用
systemctl enable systemd.service来启用它。注意,这里的systemd.service是服务文件的名称,它可能并不应该直接命名为systemd,因为这可能会引起混淆,因为 systemd本身是一个系统和服务管理器。你应该考虑使用一个更具体和描述性的服务名称。

 七、创建实时定时器

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

[Unit]
Description=Run boot backup weekly[Timer]
OnCalendar=sun,02:00 Persistent=true[Install]
WantedBy=multi-user.target

 八、总结

通过 systemd,系统管理员可以更轻松地管理、监控和控制系统的各个方面,从而提高了系统的稳定性和可靠性。此外,systemd 还提供了大量的命令行工具(如 systemctl)来与系统服务和守护进程进行交互。

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值