环境:linux
容器:docker
博客链接
linux写shell脚本备份线上数据库(备份为dump文件)http://t.csdnimg.cn/VWilN
PostgreSql本地备份为dump文件与恢复数据库的脚本与执行(单表or整个数据库)http://t.csdnimg.cn/WYp4s
linux配置定时任务–设置shell脚本定时执行(定时备份、删除数据库)http://t.csdnimg.cn/WgoTE

一、前言

继上一篇讲述: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是文件的修改时间。

Logo

更多推荐