CentOS 下使用 cron crond crontab 执行定时任务
前言
crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。其中:
- cron是服务名称;
- crond是后台进程;
- 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 执行的时候就会有问题
这里有两种解决办法:
- 使用命令的绝对路径,例如: /usr/bin/curl
- 将环境变量添加到
/etc/crontab
中。/etc/crontab
是cront的配置文件
提示2 多命令处理
ceontab中不方便执行语句繁多的任务,推荐将多条命令写到shell脚本或 python 脚本中进行执行
提示3 脚本路径问题
ceontab 中添加的 command 运行脚本必须是全路径命令。不然会找不到脚本
后记
crontab 命令很重要,也后有用