CentOS 下使用 cron crond crontab 执行定时任务

前言#

crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。其中:

  1. cron是服务名称;
  1. crond是后台进程;
  1. crontab是计划任务表;

安装#

yum install crontabs

服务命令#

1、/sbin/service crond start          启动服务

2、/sbin/service crond stop          关闭服务

3、/sbin/service crond restart       重启服务

4、/sbin/service crond reload       重新载入配置

5、/sbin/service crond status       服务是否运行

crontab 配置文件基本格式#

关于 crontab 设定时间的具体配置请自行搜索,这里不做详细说明

命令写法:分 时 日 月 周  命令

第1列表示分钟1~59 每分钟用或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列 表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

 # Use the hash sign to prefix a comment
# +—————- 分钟1~59 每分钟用或者 */1表示 
# | +————- 小时1~23(0表示0点)
# | | +———- 日期1~31
# | | | +——- 表示月份1~12 
# | | | | +—- 星期0~6(0表示星期天)
# | | | | | +—-要运行的命令 
# * * * * * command to be executed

使用#

这里我把脚本都放到了 /srv/test 目录下。我们以这个目录讲解

1. 创建一个 test.sh 文件#

# test.sh 文件内容

echo "Hello World"

2. 给 test.sh 脚本授权#

# 赋予 test.sh 可执行权限
chmod +x test.sh

3. 创建cron脚本文件,命名为crontest.cron(文件名称可以自定义)#

脚本最后必须要留有一个空行

# crontest.cron 文件内容

# 每小时运行一遍 test.sh 脚本, 这里 test.sh 是第一步创建的 shell 脚本,我们把想要执行的命令都写到这个脚本里
0 * * * * /srv/test/test.sh

# --这里命令可以写多个--
# 每天 0 点 0 分 执行 test1.sh 脚本
0 0 * * * /srv/test/test1.sh

4. 添加/更新 定时任务。执行命令#

crontab crontest.cron

完成

日志#

查看日志

cron 的日志目录为: /var/log/cron , 我们可以调用 tail -f /var/log/cron 查看实时日志,也可以调用 tail -n 50 /var/log/cron 查看历史日志

输出 shell 脚本日志

有时候我们想要把执行脚本的日志存储到文件中,我们可以这样写

# 这里需要特别注意 2>&1 是写到后面的。
* * * * * /srv/test/test.sh >> /srv/test/log.log 2>&1

辅助操作#

查看定时任务是否成功#

方法一

crontab -l

方法二

检测/var/spool/cron下是否生成对应cron脚本

设置秒级别的任务#

crontab最小时间单位是分,如果需要在秒级设置定时任务,可以使用sleep延时

如果需要每 10 秒执行一次任务,那么一分钟就需要执行 6 次, 我们每分钟同时执行 6 个 crontab 任务,即:

第一个任务 0 秒执行,第二个任务延时 10 秒执行,第三个任务延时 20 秒执行以此类推,得到

温馨提示#

提示1 环境变量问题#

crond 的任务计划并不会调用用户设置的环境变量,它有自己的环境变量

当你用到一些命令时,比如 curl / sh 等需要环境变量的命令,手工执行脚本时是正常的,但用 crond 执行的时候就会有问题

这里有两种解决办法:

  1. 使用命令的绝对路径,例如: /usr/bin/curl
  2. 将环境变量添加到 /etc/crontab 中。/etc/crontab 是cront的配置文件

提示2 多命令处理#

ceontab中不方便执行语句繁多的任务,推荐将多条命令写到shell脚本或 python 脚本中进行执行

提示3 脚本路径问题#

ceontab 中添加的 command 运行脚本必须是全路径命令。不然会找不到脚本

后记#

crontab 命令很重要,也后有用

posted @   水车  阅读(2072)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
主题色彩