前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux-使用cron执行定时任务

Linux-使用cron执行定时任务

作者头像
打铁读书郎
发布2024-04-11 21:00:31
1720
发布2024-04-11 21:00:31
举报

Linux-使用Cron执行定时任务

本文主要讲述cron定时任务工具的使用, 包含cron用法及一次实际使用

Cron

cron在linux中主要用于处理定时任务, 分为crond和crontab.crond主要用于系统进程, 而我们主要使用crontab

cron服务开启状态确认

代码语言:javascript
复制
service crond status # 查看开启状态
systemctl start crond # 开启服务cron服务

cron表达式

控制执行时间的表达式

官方用法介绍

代码语言:javascript
复制
(base) cat /etc/crontab    # 查看crontab配置文件
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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

用法示例

代码语言:javascript
复制
59 23 * * * sh /root/work_space/notice_test.sh >> /root/work_space/mylog.log 2>&1      # 每天23:59执行shell脚本,并输入日志

详细用法

参照: 简洁明了看懂cron表达式 - 知乎 (zhihu.com)

表达式验证工具: Cron - 在线Cron表达式生成器 (ciding.cc)

crontab

定时任务管理工具,加入定时任务有2中方法:

  • crontab -e: 直接编辑定时任务lsit
  • 先制作cron文件, 再crontab xxx.cron 将cron语句加入list
代码语言:javascript
复制
crontab -l # 查看定时任务列表
crontab -e # 编辑定时任务 (自动进入vim编辑页面, 对现有cron语句进行编辑)
crontab xx.cron  # 读取cron文件内的语句,加入crontab执行list

使用cron文件主要为了留存备份 , 直接crontab -e 更方便

异常排查方法

查看cron运行记录
代码语言:javascript
复制
tail -f -n 5 /var/log/cron
将输入结果输出到日志中去
代码语言:javascript
复制
56 14 * * * sh /root/work_space/notice_test.sh >> /root/work_space/mylog.log 2>&1

2>&1 的意思就是将标准错误重定向到标准输出

常见异常

cron冲突

具体表现为: 找不到环境依赖的某个包

conda会在用户的.bashrc文件中修改环境变量,但cron起一个非interactive的bash的时候不会加载用户.bashrc中的脚本。

如果我们需要在shell脚本中使用conda, 我们需要在cron执行的任务当中手动执行这些脚本。

代码语言:javascript
复制
source ~/.bashrc          # 初始化Linux环境
conda activate base			# 使用指定环境
python -m pytest testcases/test/test_questionnaire.py
时区问题

可通过运行记录判断, 解决方法可参照Crontab的时区问题 - 简书 (jianshu.com)

记录一次定时脚本运行

0准备

  1. 待运行的脚本 – 通过git传输
  2. 环境依赖 – 通过conda管理

1编辑sh文件

编写shell命令脚本,添加部署方式

代码语言:javascript
复制
cd ~/work_space/my-pytest-project/
source ~/.bashrc          # 初始化Linux环境,主要为了启用conda
conda activate base			# 使用指定环境
python -m pytest testcases/test/test_questionnaire.py   # python -m将当前目录加入path中, 使用pytest方式运行用例

运行测试

代码语言:javascript
复制
(base) sh test.sh 

2编辑cron文件

创建cron文件

代码语言:javascript
复制
vim test.cron   # 进入vim界面添加定时任务语句

加入cron语句

代码语言:javascript
复制
56 14 * * * sh /root/work_space/notice_test.sh >> /root/work_space/mylog.log 2>&1

3设定定时任务

添加任务

代码语言:javascript
复制
(base) systemctl start crond  #系统开启crond服务
(base) crontab ~/work_space/notice.cron  # 将cron文件信息加入定时任务
(base) crontab -l   # 查看当前定时任务  

设置当前时间测试运行结果

代码语言:javascript
复制
(base) crontab -e 
...  # 对定时任务信息进行修改,增加稍晚时间
(base) tail -f mylog.log 		# 查看运行结果

4定时任务结果

删除测试语句, 等待定时任务执行后查看结果

总结

cron是类Unix系统中非常有名的定时任务工具, Jenkins就内置了cron . 使用cron,我们可以非常方便的定时执行shell脚本, 适用于一些轻量级的任务.

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux-使用Cron执行定时任务
    • Cron
      • cron服务开启状态确认
      • cron表达式
      • crontab
      • 异常排查方法
      • 常见异常
    • 记录一次定时脚本运行
      • 0准备
      • 1编辑sh文件
      • 2编辑cron文件
      • 3设定定时任务
      • 4定时任务结果
    • 总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com