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

马肤
这是懒羊羊

目录

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

                【docker】之linux配置定时任务--设置shell脚本定时执行(可定时备份、删除数据库),在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,服务,操作,没有,第1张

                4. 权限

                crontab权限问题到/var/adm/cron/下看文件cron.allow和cron.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命令

                  【docker】之linux配置定时任务--设置shell脚本定时执行(可定时备份、删除数据库),在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,服务,操作,没有,第2张

                  下面是如何设置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

                          【docker】之linux配置定时任务--设置shell脚本定时执行(可定时备份、删除数据库),在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,服务,操作,没有,第3张

                          三、简单快捷版

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

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

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

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

                            【docker】之linux配置定时任务--设置shell脚本定时执行(可定时备份、删除数据库), ,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,服务,操作,没有,第4张

                            打开root文件如下:

                            【docker】之linux配置定时任务--设置shell脚本定时执行(可定时备份、删除数据库),在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,服务,操作,没有,第5张

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

                              四、 关于权限与mail

                              1. mail

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

                                【docker】之linux配置定时任务--设置shell脚本定时执行(可定时备份、删除数据库),在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,服务,操作,没有,第6张

                                【docker】之linux配置定时任务--设置shell脚本定时执行(可定时备份、删除数据库),在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,服务,操作,没有,第7张

                                • 还可以直接在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--

                                      【docker】之linux配置定时任务--设置shell脚本定时执行(可定时备份、删除数据库),在这里插入图片描述,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,服务,操作,没有,第8张

                                      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是文件的修改时间。


文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:表情:
评论列表 (暂无评论,0人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码