《Linux从小白到高手》理论篇:深入理解Linux的计划任务/定时任务

news2024/11/30 12:46:37

值此国庆佳节,深宅家中,闲来无事,就多写几篇博文。本篇详细深入介绍Linux的计划任务/定时计划。

Linux的计划任务

在很多时候为了自动化管理系统,我们都会用到计划任务,比如关机,重启,备份之类的操作,都可以使用计划任务来完成,这样可以大大降低管理员的工作量,而且可靠度更好。
在这里插入图片描述
linux系统支持一些能够自动执行任务的服务,称之为计划任务。 在 Linux 中主要有以下几种计划任务类型:
1、cron 定时任务
系统级 cron 任务
–通常由系统管理员设置,用于执行系统维护任务,如备份数据库、清理临时文件等。
–系统级 cron 任务的配置文件通常位于 /etc/crontab 以及 /etc/cron.d/ 目录下的文件。
–这些任务以特定的用户身份(如 root)运行,以确保有足够的权限执行系统级操作。
用户级 cron 任务
–普通用户可以设置自己的 cron 任务,用于执行个人的自动化任务,如定时备份个人文件、运行特定的脚本等。
–用户可以使用 crontab -e 命令来编辑自己的 cron 任务列表。
2、at 定时任务
一次性定时任务
–at 命令用于安排一次性的任务在特定的时间执行。
–你可以指定具体的时间点,如 “明天上午 10 点” 或 “晚上 8 点 30 分” 等。
–任务执行完毕后,不会再次自动执行,适用于只需要执行一次的特定任务。
3、anacron 定时任务
适用于非连续运行系统
–如果系统不是一直处于运行状态,比如笔记本电脑可能会经常关机,anacron 就很有用。
–它会在系统启动后检查上次执行任务的时间,如果超过了指定的时间间隔,就会执行相应的任务。
–通常用于那些不需要在特定时间点严格执行的任务,如每日的日志清理或软件更新检查等。
4、守护进程的定时任务
特定服务的定时操作
–一些守护进程本身具有定时任务功能。
–例如,日志轮转工具(logrotate)通常作为一个守护进程运行,它会定期(如每天、每周)对系统日志进行轮转和压缩,以防止日志文件过大。
–数据库管理系统也可能有自己的定时任务,如自动备份数据库、清理过期数据等。

计划任务的使用场合

1、系统管理
备份重要数据
–可以定期(如每天、每周)对关键数据进行备份,确保在系统故障或数据丢失时能够快速恢复。–例如,使用备份工具对数据库、文件服务器中的重要文件进行自动备份。
–对于企业级系统,数据的安全性至关重要,计划任务可以确保备份按时进行,减少人工操作的失误和不确定性。
清理临时文件和日志
–随着系统的运行,会产生大量的临时文件和日志文件。定期清理这些文件可以释放磁盘空间,提高系统性能。
–例如,每天凌晨对 /tmp 目录下的临时文件进行清理,每周对系统日志文件进行归档和压缩,保留一定时间范围内的日志以便查询,同时删除旧的日志文件。
系统更新和维护
–可以设置计划任务在特定时间自动检查系统更新,并在合适的时候进行安装。这可以确保系统始终保持最新的安全补丁和功能改进。
–对于服务器系统,还可以定期进行硬件检查、磁盘检查等维护操作,以提前发现潜在的问题并进行处理。
2、软件开发和部署
自动构建和测试
–在软件开发过程中,可以使用计划任务自动触发代码构建和测试流程。例如,每小时从代码仓库拉取最新代码,进行自动构建和单元测试。
–可以及时发现代码中的问题,提高开发效率,同时确保代码的质量和稳定性。
部署应用程序
–对于持续集成 / 持续部署(CI/CD)流程,可以设置计划任务在特定条件下自动部署应用程序。–例如,当代码通过所有测试后,自动将应用程序部署到生产环境。
–可以实现快速的应用程序更新和迭代,减少人工部署的时间和错误。
3、业务流程自动化
定时发送报告
–在企业中,经常需要定期生成和发送各种报告,如销售报表、财务报表等。可以使用计划任务自动生成报告,并通过邮件或其他方式发送给相关人员。
–例如,每月第一天自动生成上月的销售报告,并发送给销售团队和管理层。
数据采集和处理
–对于需要定期采集和处理数据的业务场景,计划任务可以自动执行数据采集和处理流程。例如,每天从外部数据源获取数据,进行清洗和分析,然后将结果存储到数据库中供后续使用。
–可以确保数据的及时性和准确性,为业务决策提供可靠的支持。
4、个性化服务
定时提醒
–可以使用计划任务设置定时提醒,如提醒自己参加会议、完成任务等。例如,使用命令行工具或脚本结合通知服务,在特定时间弹出提醒窗口或发送邮件提醒。
自动同步文件
–如果你有多个设备,并且需要保持文件的同步,可以使用计划任务自动执行文件同步操作。例如,每天晚上自动将笔记本电脑上的重要文件同步到云存储或外部硬盘中。
–可以确保你的文件始终安全备份,并且在不同设备之间保持一致。

计划任务的常用部署

1、使用 cron 部署定时计划任务
编辑 cron 任务表
–以普通用户身份执行 crontab -e 命令,这会打开一个文本编辑器,通常是 vi 或 nano,具体取决于系统配置。
–在编辑器中,按照 cron 的格式输入任务。例如,要每天凌晨 2 点执行一个名为 /path/to/script.sh 的脚本,可以输入:0 2 * * * /path/to/script.sh,保存并退出
*–执行 crontab -l 命令可以查看当前用户的 cron 任务列表,确认刚才添加的任务是否正确显示。
系统级 cron 任务部署(不常用到):
–如果需要设置系统级的 cron 任务,管理员可以编辑 /etc/crontab 文件或者在 /etc/cron.d/ 目录下创建新的文件。
–系统级任务的格式与用户级任务类似,但需要指定任务执行的用户。例如:

0 3 * * * root** /path/to/system_script.sh,

表示每天凌晨 3 点以 root 用户身份执行 /path/to/system_script.sh 脚本。
2、使用 at 部署一次性定时计划任务
安排任务
执行 at time 命令,其中 time 是任务执行的时间。例如,at 10:30 tomorrow 表示在明天上午 10 点 30 分执行任务。
然后在命令提示符下输入要执行的命令或脚本。例如:/path/to/script.sh。
按下 Ctrl+D 结束输入。
查看任务队列
执行 atq 命令可以查看当前系统中的 at 任务队列,确认任务是否成功添加。
删除任务
如果需要删除一个 at 任务,可以执行 atrm job_number,其中 job_number 是任务的编号,可以通过 atq 命令查看。
3、注意事项
权限问题
–确保任务中执行的脚本或命令具有足够的权限。如果需要以特定用户身份执行任务,可以在 cron 任务或 at 任务中指定用户。
–对于系统级任务,管理员需要谨慎设置权限,以防止安全漏洞。
脚本和命令的正确性
–在添加任务之前,最好先手动测试要执行的脚本或命令,确保其能够正确运行并产生预期的结果。注意脚本中的路径是否正确,以及是否依赖于特定的环境变量。
日志记录
–为了便于排查问题,可以在脚本或命令中添加日志记录功能,将任务的执行情况记录到文件中。这样,在任务出现问题时,可以通过查看日志来确定原因。
系统稳定性
–大量的定时任务可能会对系统性能产生影响。在部署定时任务时,要考虑系统的负载情况,避免在系统繁忙时执行耗时较长的任务。

Linux计划任务的时间设置格式

1、cron 计划任务的时间格式
cron 任务的时间格式由五个字段组成,分别表示分钟、小时、日、月、星期。每个字段可以使用以下几种方式进行设置:
具体值
直接指定一个具体的数字,例如 “5” 表示在该字段对应的时间单位上的第 5 个单位执行任务。比如,“5 3 * * *” 表示每天凌晨 3 点 5 分执行任务。
范围
使用一个范围表示多个值,例如 “1-5” 表示在该字段对应的时间单位上的第 1 到第 5 个单位执行任务。比如,“0 1-5 * * ” 表示每天凌晨 1 点到 5 点的每分钟执行任务。
步长值
使用 “/” 和一个数字表示步长,例如 “/5” 表示每隔 5 个单位执行任务。比如,“/5 * * * ” 表示每 5 分钟执行一次任务。
通配符 “

表示所有可能的值。例如,“
* * * *” 表示每分钟执行任务。
举例:

//每天早上5点清空/tmp目录下的所有文件:
0 5 * * * /bin/rm -rf /tmp/*
//每周日午夜执行/etc/scripts/backup.sh脚本进行数据备份:
0 0 * * 0 /etc/scripts/backup.sh
//每小时的第15分钟查看系统负载情况(使用uptime命令)并将结果记录到/var/log/load.log文件:
15 * * * * /usr/bin/uptime >> /var/log/load.log 2>&1
//每天晚上11点到早上7点之间,每隔2小时清理/home目录下的临时文件:
0 23-7/2 * * * /bin/find /home -type f -name "*.tmp" -exec rm -f {} \;

2、at 定时任务的时间设置
at 任务可以使用更直观的时间描述方式,例如:
具体时间
“10:30 tomorrow” 表示在明天上午 10 点 30 分执行任务。
“8pm next Friday” 表示在下周五晚上 8 点执行任务。
相对时间
“now + 2 hours” 表示从现在起 2 小时后执行任务。
“5 minutes from now” 表示从现在起 5 分钟后执行任务。

Linux计划任务常用命令(很少)

1、cron 相关命令
crontab -e:
–用于编辑当前用户的 cron 任务表。打开一个文本编辑器,用户可以在其中添加、修改或删除 cron 任务。
–例如:crontab -e后,可以添加一行 “0 2 * * * /path/to/backup_script.sh” 来设置每天凌晨 2 点执行备份脚本。
crontab -l:
–列出当前用户的 cron 任务表。可以查看已设置的任务,确认任务是否正确配置。
–执行该命令后,会显示当前用户的所有 cron 任务,包括任务的执行时间和要执行的命令。
crontab -r:
–删除当前用户的所有 cron 任务。谨慎使用此命令,因为它会立即删除所有任务,且不可恢复。
例如:如果想要清空当前用户的 cron 任务,可以执行crontab -r。
2、at 相关命令
at time:
–安排一次性的任务在指定时间执行。其中time可以是具体的时间点描述,如 “tomorrow 10:30” 表示明天上午 10 点 30 分。
–执行该命令后,会进入一个输入模式,可以输入要执行的命令或脚本。输入完成后,按下Ctrl+D结束输入。
atq:
–查看当前系统中的 at 任务队列。显示已安排但尚未执行的一次性任务列表。
列表中会显示任务的编号、执行时间和执行的用户等信息。
atrm job_number:
–删除指定编号的 at 任务。其中job_number是通过atq命令查看到的任务编号。
–例如:如果要删除编号为 5 的 at 任务,可以执行atrm 5。

一些数据库或编程语言本身自带定时任务执行能力,结合Linux计划任务来实现更细粒度时间的任务控制和触发,在此不再赘述。

本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树--堆

1.二叉树的顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两…

CSP-J Day 4 模拟赛补题报告

姓名:王胤皓,校区:和谐校区,考试时间: 2024 2024 2024 年 10 10 10 月 4 4 4 日 9 : 00 : 00 9:00:00 9:00:00~ 12 : 30 : 00 12:30:00 12:30:00,学号: S 07738 S07738 S07738 请关注作者的…

Windows应用开发-解析AVI视频文件

本Windows应用解析AVI视频文件,以表格的方式显示AVI文件结构。并可以将结果保存到bmp图片。下面是,使用该应用解析一部AVI电影获得的图片。 应用开发信息 定义一个INFO结构,包含两个字符串对象,一个ULONGLONG变量,和…

奔驰AMG GT50升级原厂阀门运动排气声浪效果

AMG 排气系统 声浪级别可控制的AMG高性能排气系统可带来不同凡响的听觉体验。借助可调式废气风门,按下按钮,即可按需改变车辆的声浪,体验不同音色。静谧深沉或动感澎湃,悦耳声浪,如你所愿。

Python画笔案例-076 绘制纯画笔弹球

1、绘制纯画笔弹球 通过 python 的turtle 库绘制 纯画笔弹球,如下图: 2、实现代码 绘制纯画笔弹球,以下为实现代码: """纯画笔弹球动画.py读者可以在此基础上把它修改成一个拦球游戏。步骤为,建立一个Rect类,即矩形类。然后采用按键检测,当按了键时重画…

​​Python+Matplotlib可视化简单反函数和复合函数

import numpy as np import matplotlib.pyplot as plt# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 用黑体显示中文 plt.rcParams[axes.unicode_minus] False # 正常显示负号# 创建图形和子图 fig, (ax1, ax2) plt.subplots(1, 2, figsize(15, 6))# 反函数示…

Line: 折线图

对北京市、天津市、上海市、重庆市的近10年人口,做出折线图,效果 参考:Line - Basic_line_chart - Document (pyecharts.org) 1、折线图模板 import pyecharts.options as opts from pyecharts.charts import Linex_data ["Mon"…

基于Springboot+Vue的中医院问诊系统的设计与实现 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

内存卡数据恢复软件大揭秘,拯救你的重要数据

我们的生活中充斥着各种各样的数据,而内存卡作为一种常见的数据存储设备,承载着我们的照片、视频、文档等重要信息。然而存储在电子设备上就有可能导致数据丢失的情况。今天我们一起来探讨内存卡数据恢复的一些工具吧。 1.福晰内存卡数据恢复 连接直达…

ros2使用roscore报错

如果你在ros2中使用roscore命令,可能会出现报错。 即使你按照下面的命令安装python3-roslaunch,还是会报错。 注意,在ROS2中,已经不需要通过roscore命令启动ROS系统了。 ROS2中,不再需要ROS1中的roscore命令来启动一个…

【Python】Arrow使用指南:轻松管理日期与时间

Arrow 是一个基于 Python 的日期与时间管理库,提供了更人性化和直观的 API 处理时间数据。与 Python 标准库中的 datetime 模块相比,Arrow 极大地简化了时间创建、转换、格式化和操作的步骤。它通过统一的接口封装了常见的时间操作,支持时区转…

[C语言]--编译和链接

文章目录 目录 文章目录 前言 一、环境介绍 二、翻译环境 1.预处理(预编译) 2.编译 3.汇编 4.链接 三、运行环境 前言 对编译和链接 进行简单的介绍 一、环境介绍 在ANSIC的任何⼀种实现中,存在两个不同的环境。 翻译环境,在这…

Python从入门到高手4.4节-算法实战之计算次大值

目录 4.4.1 四个随机数中的次大值 4.4.2 计算次大值的算法思路 4.4.3 使用循环计算次大值 4.4.4 祝祖国繁荣昌盛 4.4.1 四个随机数中的次大值 假设有四个整型变量,它们值的大小未知,该怎么计算出四个中的次大值? 次大值即第二大的数。初…

vsomeip用到的socket

概述: ​ vsomeip用到的socket的代码全部都在implementation\endpoints目录下面,主要分布在下面六个endpoint类中: local_client_endpoint_impl // 本地客户端socket(UDS Socket或者127.0.0.1的socket)local_server…

深入挖掘C++中的特性之一 — 继承

目录 1.继承的概念 2.举个继承的例子 3.继承基类成员访问方式的变化 1.父类成员的访问限定符对在子类中访问父类成员的影响 2.父类成员的访问限定符子类的继承方式对在两个类外访问子类中父类成员的影响 4.继承类模版(注意事项) 5.父类与子类间的转…

FTP服务原理及使用

一、配置FTP服务 配置FTP服务,内容不难,本地虚拟机上自带FTP服务程序,自己下载即可。 二、理解FTP的主动模式和被动模式原理 1 主动模式 客户端先开启一个大于1024的随机端口,用来与服务器的21号端口建立控制连接;当…

rabbitmq消费者应答模式

1.应答模式 RabbitMQ 中的消息应答模式主要包括两种:自动应答(Automatic Acknowledgement)和手动应答(Manual Acknowledgement)。 自动应答: 不在乎消费者对消息处理是否成功,都会告诉队列删…

win11远程连接MySQL(linux版),不需安装docker容器

不想安装虚拟机,想在Windows 11上运行Linux。 在win11的搜索框内,搜索"启用或关闭",出现了“启用或关闭Windows功能”,双击打开。 勾选"适用于Linux的Windows子系统",“虚拟机平台”&#xff0c…

网站可疑问题

目标站点 Google hack 页面访问 抓包 POST /admin.php?actionlogin HTTP/2 Host: www.xjy.edu.cn Cookie: xkm_sidA6x4Cgw2zx User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0 Accept: text/html,application/xhtmlxml,appl…

AtCoder ABC373 A-D题解

ABC372 的题解没写是因为 D 是单调栈我不会(⊙︿⊙) 比赛链接:ABC373 总结&#xff1a;wssb。听说 E 很水&#xff1f;有时间我看看。 Problem A: Code #include <bits/stdc.h> using namespace std; int mian(){int ans0;for(int i1;i<12;i){string S;cin>&g…