【docker】之linux配置定时任务--设置shell脚本定时执行(可定时备份、删除数据库)

devtools/2024/11/9 16:45:01/

目录

  • 一、前言
    • 1. 关于cron
    • 2. cron服务相关命令
    • 3. cron查找配置文件
    • 4. 权限
  • 二、步骤
    • 1. 编辑crontab文件
    • 2. 添加定时任务
    • 3. 任务格式解读
    • 4. 编辑好crontab文件后保存并退出
    • 5. 其他
    • 6. 日志
  • 三、简单快捷版
  • 四、 关于权限与mail
    • 1. mail
    • 2. 权限

环境:linux
容器:docker

一、前言

继上一篇讲述:linux写shell脚本备份线上数据库,今天我们来看看如何在linux上设置定时任务来自动执行脚本备份数据库/删除数据库备份

要设置Shell脚本定时执行,你可以使用Linux系统中的cron服务。cron是一个用于在固定时间、日期或间隔执行预定任务的工具。

1. 关于cron

  • crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行

  • cron的配置文件称为“crontab”,是“cron table”的简写

2. cron服务相关命令

cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。

  • service crond start //启动服务

  • service crond stop //关闭服务

  • service crond restart //重启服务

  • service crond reload //重新载入配置

  • service crond status //查看服务状态

3. cron查找配置文件

cron在下面三个地方查找配置文件(一般情况下均喜欢使用第一个 /var/spool/cron

  • 1、/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个crontab文件。
  • 2、/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。
  • 3、/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
    在这里插入图片描述

4. 权限

crontab权限问题到/var/adm/cron/下看文件cron.allowcron.deny是否存在

用法如下:

  • 如果两个文件都不存在,则只有root用户才能使用crontab命令。

  • 如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。

  • 如果cron.allow不存在,cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。

  • 如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。

如下我的目录下两个文件都不存在,也就是说,只有登录用户是root用户才可以使用crontab命令
在这里插入图片描述

下面是如何设置Shell脚本定时执行的步骤

二、步骤

1. 编辑crontab文件

  1. 编辑crontab文件
    打开终端,并输入以下命令来编辑当前用户的crontab文件:

    crontab -e
    

    如果你需要以root用户身份设置定时任务,则使用sudo 命令:
    这将会打开一个文本编辑器(通常是vi或nano,取决于你的系统配置),用于编辑crontab文件。

    sudo crontab -e
    

2. 添加定时任务

  1. 添加定时任务
    在打开的编辑器中,添加一行来定义你的定时任务。每一行代表一个任务,其格式如下:

    * * * * * /path/your.sh
    
    • path是绝对路径
    • your.sh就是要执行的shell脚本

3. 任务格式解读

  1. 定时任务格式含义

    这五个星号分别代表:
    分钟(0 - 59)
    小时(0 - 23)
    日期(1 - 31)
    月份(1 - 12)
    星期(0 - 7,其中0和7都表示周日)

  • 例如,如果想在每天的23点59分点执行脚本,你可以这样写:

    59 23 * * * /path/to/your_script.sh
    
  • 如果想在多个小时或者多个日期执行脚本,日期时间之间用逗号隔开即可:(每月1号,3号的22点和23点的59分都执行定时任务)

    59 23,22 1,3 * * /path/to/your_script.sh
    

注意:要确保脚本路径是正确的,并且脚本具有执行权限。

4. 编辑好crontab文件后保存并退出

  • vi编辑器,按Esc,然后输入:wq并按Enter来保存并退出。

5. 其他

大多数Linux发行版默认都会启动cron服务。你可以使用以下命令:

  • 检查cron服务的状态:

    sudo systemctl status cron
    
  • 启动cron服务命令

    sudo systemctl start cron
    

6. 日志

如果脚本没有按预期执行,你可以查看cron的日志来获取更多信息。

  • cron的日志通常位于/var/log/syslog或/var/log/cron.log

在这里插入图片描述

三、简单快捷版

我一般不喜欢使用vim编辑crontab文件

  • crontab文件位于/var/spool/cron/目录下(一般都是在root文件里面),可以直接新建root文件进行手动编辑后,直接上传即可;

  • 若是目录下有root 文件则直接进行编辑;若是没有root文件则新建即可;

    每个用户都有自己的crontab文件,文件名与用户名一致所以说一般都是root文件。用户可以使用crontab命令来编辑自己的计划任务,并将需要执行的命令序列放入crontab文件中。这样,系统就会在预定的时间自动执行这些命令或脚本。

打开root文件如下:
在这里插入图片描述

  • 可在root文件里面写多个任务执行不同的shelll脚本;
  • 编辑好root文件后上传即可,然后进行验证;

四、 关于权限与mail

1. mail

  • cron把任何输出都email到root的信箱了也就说只要我们在要执行的shell脚本里面写了echo命令,那么任何的输出都会放在root的信箱:打开root文件即可看到
  • 文件目录:/var/mail 或者/var/spool/mail

在这里插入图片描述

在这里插入图片描述

  • 还可以直接在root文件里查看shell脚本执行失败的原因;
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/# For details see man 4 crontabs# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

MAILTO=root:是说,当 执行shell命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给谁?所以会在root的email中收到错误信息;

2. 权限

比如我们在email的root文件中发现下面这个输出:(path是test.sh脚本所在的绝对路径)

/bin/sh: /path/test.sh: Permission denied
  • 这个错误消息表明你尝试执行的 test.sh 脚本文件没有执行权限。在Linux和Unix系统中,你需要确保文件具有执行权限才能运行它。
  • 权限:r-可读;w-可写;x-可执行
  1. 检查文件权限:
    使用 ls -l /path/test.sh 命令来查看 test.sh 文件的权限。输出将显示文件的权限,类似-rw-r--r--这样的格式。

  2. 给予执行权限
    如果文件没有执行权限(即没有 x 字符在权限字符串中),可使用 chmod 命令来添加执行权限

  • 给文件所有者执行权限

    chmod u+x /mnt/water-gas/tools/postgresql/dbdump/test.sh
    
  • 给所有用户执行权限

    chmod +x /mnt/water-gas/tools/postgresql/dbdump/test.sh
    
  • 添加完权限后可看到-rwxr--r--
    在这里插入图片描述

  1. 如何查看文件所有者
    使用ls -l命令
  • 打开终端

  • 使用cd命令切换到包含你想要查看所有者的文件的目录。例如,如果你想要查看/home/postgresql/dbdump/test.sh文件的所有者:cd/home/postgresql/dbdump

  • 运行ls -l命令来查看文件和目录的详细信息。输出将包括文件所有者(列出的第一个字段):

    ls -l test.sh
    
  • 输出类似于:

    -rw-r--r-- 1 username groupname 1234 May 15 10:00 test.sh
    

    在这个例子中,username是文件的所有者,groupname是文件的组所有者。1234是文件大小,May 15 10:00是文件的修改时间。


http://www.ppmy.cn/devtools/12959.html

相关文章

探索SmartEDA:电路仿真的教学新境界

在电子工程的教学领域,随着技术的飞速发展,传统的教学方法已经难以满足现代学生的学习需求。近年来,电路仿真软件在教学中的应用逐渐受到关注,而SmartEDA作为一款功能强大的电路仿真软件,为电子工程教学带来了革命性的…

苍穹外卖day11 Apache ECharts 数据统计-图形报表

文章目录 前言一、Apache ECharts二、营业额统计1. 业务规则2. 接口设计3. 代码实现 三、用户统计1. 业务规则2. 接口设计3. 代码实现 四、订单统计1. 业务规则2. 接口设计3. 代码实现 五、销量排名Top101. 业务规则2. 接口设计3. 代码实现 前言 作为后端开发人员使用Echarts&…

LeetCode216:组合总和Ⅲ

题目描述 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 解题思想 使用回溯算法 代码 class So…

【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 目录 …

开放API请求工具类

一、API请求工具类 package com.dst.lcb.base.common.utils;import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.dst.steed.common.domain.response.Response; imp…

SS26A-ASEMI超低VF值肖特基SS26A

编辑:ll SS26A-ASEMI超低VF值肖特基SS26A 型号:SS26A 品牌:ASEMI 封装:SMA 最大平均正向电流(IF):2A 最大循环峰值反向电压(VRRM):60V 最大正向电压&a…

3DE DELMIA Role: PSFEM - Structure Fabrication Engineer for Marine

Discipline: Process Engineering Role: PSFEM - Structure Fabrication Engineer for Marine 通过结构详细设计生成的基于规则的自动化工作准备,用于管理用于生产的制造可交付成果 所有结构设计零件的基于规则的工作准备和对应的生产可交付成果(工程图、机器数据&…

网络安全之SQL注入及防御(下篇)

目录 什么是SQL注入? 一,SQL注入会导致什么呢? 二,SQL注入思想与步骤 三,SQL注入的绕过 四,sqlmap工具的使用 五,sql注入的防御方法 总结 什么是SQL注入? SQL注入(…