📜  每天运行一次 cron - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:40:40.001000             🧑  作者: Mango

每天运行一次 cron - Shell-Bash

介绍

Cron是Unix和类Unix操作系统下的一个任务调度程序,它能在指定时间执行特定的命令。在Linux系统中,我们可以通过编写Shell-Bash脚本并使用cron来定时地执行这些脚本。

一般来说,我们可以用cron来完成定时备份、数据统计、应用运行等系统管理任务。

cron的特点
  • 简单易用,几乎所有的Unix/Linux系统都自带cron。
  • 可以进行分钟、小时、日、月、周等多维度的定时任务设置。
  • 支持多种日程表达式格式,如* * * * *命令,0 0 * * *命令,等等。
  • 可以通过日志查看任务的执行情况以及错误日志。
  • 可以独立运行,还可以与其他程序联动。
cron常用命令
  • crontab -e:编辑cron任务
  • crontab -l:查看cron任务
  • crontab -r:删除cron任务
cron表达式解析

通过cron表达式,可以实现非常丰富的定时任务,如分钟定时、每小时定时、每天定时、每周定时、每月定时、甚至是每年定时。在使用cron时,我们需要掌握一些表达式的基本知识:

  • * 代表所有可能的值
  • / 用于指定间隔值
  • , 分隔符可以用于在单个字段中指定多个值
  • - 用于指定范围

具体用法如下:

  • * * * * *:每分钟执行一次
  • 0 * * * *:每小时0分执行一次
  • 0 0 * * *:每天0点执行一次
  • 0 0 * * 1:每周一0点执行一次
  • 0 0 1 * *:每月1日0点执行一次
编写Shell脚本并使用cron

我们可以通过Shell脚本来实现需要定时执行的任务,并使用cron来实现定时执行。Shell脚本使用bash语言编写,通用的文件后缀名为.sh

下面是一个简单的例子,用于每天备份MySQL数据库:

#!/bin/bash

# 备份目标数据库
db_name=example_db
# 备份文件存储位置
backup_dir=/home/backup

# 创建目录
mkdir -p $backup_dir

# 获取当前日期,作为备份文件名的一部分
backup_time=$(date +"%Y-%m-%d_%H-%M-%S")
backup_file="$backup_dir/$db_name-$backup_time.sql"

# 使用mysqldump备份数据库
mysqldump -u root -p123456 $db_name  > $backup_file

# 错误检查,只会输出错误信息
if [ $? -eq 0 ]; then
    echo "Backup successfully completed."
else
    echo "Backup failed."
fi

在使用cron时,我们需要将脚本放在合适的路径下,并给脚本设定可执行权限。然后使用以下命令编辑cron任务:

crontab -e

在打开的编辑器中,我们可以按照cron表达式格式,指定需要执行的Shell脚本:

# 每天0点备份MySQL数据库
0 0 * * * /bin/bash /home/backup_mysql.sh

这样,每天0点时我们就会看到Shell脚本的输出,以及任何可能发生的错误信息。

结语

通过cron,我们可以实现非常丰富的定时任务,使系统管理员可以轻松地完成各种定时系统管理任务。同时,我们也可以使用Shell脚本来实现更加复杂的逻辑,如备份、数据统计等。