加载中...

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 @ 2021-02-28 18:08  水车  阅读(1751)  评论(0编辑  收藏  举报