Linux执行定时任务(crontab)遇到的坑

文章目录

    • 前言:
  • 1、建立定时任务的两种方式
    • 1.1、crontab -e
    • 1.2、vi /etc/ crontab
  • 2、两种方法的区别
    • 2.1、用户级
    • 2.2、系统级
  • 3、解决办法

前言:

之前第一次要在生产环境部署定时任务,无奈的是,博主对定时任务这块还是个小白,但是任务却需要部署一连串的定时任务,前后的定时任务之间还有关联。。。由于数据采集的时间有特殊要求,所以整个流程就挺恶心的更别说部署了,部署之后有想过用Azkaban来串联多个定时任务,但是由于其他原因也没来得及实践,这里记录下期间遇到的坑。

刚开始实现第一个crontab定时任务时,就遇到很多问题。这里参考了网上的一些文章,如:

第一步:写cron脚本文件,命名为crontest.cron。 
15,30,45,59 * * * * echo “xgmtest…..” >> xgmtest.txt 表示,每隔15分钟,执行打印一次命令第二步:添加定时任务。执行命令 “crontab crontest.cron”。搞定第三步:”crontab -l” 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本

1、建立定时任务的两种方式

但是差点把之前老员工部署的定时任务给搞丢(由于不懂原理差点铸成大错)。。所以就先来说下定时任务的两种添加方式:

1.1、crontab -e

#直接写入定时任务
*/10 17-18 * * * root tcpdump -i eth0 tcp port 80 -s 0 -w sohu1.txt
*/10 17-18 * * * root tcpdump -i eth0 tcp port 80 -s 0 -w sohu1.cap

1.2、vi /etc/ crontab

vi /etc/ crontab
#添加定时任务 
30 10 * * * root /sbin/reboot重新加载配置
/sbin/service crond reload
重启cron
/sbin/service crond restart

2、两种方法的区别

crontab -e对应的是用户级,vi /etc/ crontab对应的系统级的

2.1、用户级

使用crontab -e 这个命令会自动打开vim然后编辑定时脚本文件,编写后保存,在ubuntu下会被写到/var/spool/cron/crontabs目录下,生成一个和用户名一致的文件,我们可以直接用crontab -l查看内容,

ml@linux:~$ crontab -e
ml@linux:~$ crontab -l
30 * * * * /home/ml/tools/login.sh
ml@linux:~$ sudo cat /var/spool/cron/crontabs/ml
30 * * * * /home/ml/tools/login.sh

2.2、系统级

cronotab -e是针对用户来设计的,如果是系统的例行性任务,需要编辑/etc/crontab这个文件,编辑完所有用户都会受其影响:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
0 * * * *  root /home/ml/tools/login.sh

每列分别是分、时、日、月及周进行一次的工作!但是在五个字段后面接的并不是命令,而是执行命令的身份!这个用户的crontab -e不相同。由于用户自己的crontab并不需要指定身份,但/etc/crontab里面需指定身份。

OK,添加了定时任务就要看这个定时任务是否生效,但是实际操作中执行定时的python脚本时,如下

#40 15 * * * /usr/local/bin/python3  /opt/FileTransclation.py(每天在15:40自动上传文件)

却报各种错误,基本上全是和环境相关,但问题是,我再Linux下手动执行改脚本时,却没有任何问题,这里大胆怀疑定时任务在执行这个python脚本时用的别的环境变量,后来查了资料发现,怀疑果然成立,crontab有自己的用户,在执行脚本的时候会用自己的环境变量,而我们用的是我们自己的环境变量(装有python及所需环境),所以也就能解释为什么执行python脚本会失败了。根据网上的文章一顿操作,修改了crontab的启动时的环境变量,但是发现问题依旧存在。。。但是,这就真的没有其他的解决办法了吗?怎么会,既然没法直接启动python脚本,我们可以间接启吗!既然crontab的环境变量和用户的环境变量有差异,那我们就利用两者的环境变量相同的地方。

3、解决办法

通过自定义shell脚本,然后用定时任务来启shell脚本(shell环境变量两者肯定都有吧),在shell脚本里面来启Python脚本,但前提是你要指定对应的环境变量
模板如下:
第一步:添加定时任务

crontab -e 
#添加定时任务
40 09 * * * cd /root/auto_call; ./start_auto_call.sh >> auto_call.log 2>&1

第二步:创建shell脚本
vi start_auto_call.sh

#!/bin/bash
. /etc/profile
. ~/.bash_profile
set -xpython auto_call.py  

这样只要能在你当前环境下运行的任务,也一定可以在crontab中运行!

参考:https://blog.csdn.net/idkevin/article/details/72948962

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue:解决[Vue warn]: Failed to resolve directive: modle (found in Anonymous)

解决问题 [Vue warn]: Failed to resolve directive: modle (found in <ComponentA>) console.error(("[Vue warn]: " msg trace)); 原因是 我把model 写成了 modle 这类错误一般是单词写错了 (found in <Anonymous>) 解决思路

Oracle树查询及相关函数

Oracle树查询的最重要的就是select...start with... connect by ...prior 语法了。依托于该语法&#xff0c;我们可以将一个表形结构的中以树的顺序列出来。在下面列述了Oracle中树型查询的常用查询方式以及经常使用的与树查询相关的Oracle特性函数等&#xff0c;在这里只涉及到…

Mysql常用函数总结

文章目录前言&#xff1a;1、日期相关函数1.1、mysql获取未来、现在、过去的时间&#xff1a;DATE_SUB&#xff08;&#xff09;、DATE_ADD()1.2、格式化日期&#xff1a;date_format&#xff08;&#xff09;1.3、MySQL 日期、时间相减函数&#xff1a;datediff(date1,date2),…

一行Python代码制作动态二维码

目录 1、普通二维码 2、艺术二维码 3、动态二维码 在GitHub上发现了一个比较有意思的项目&#xff0c;只需要一行Python代码就可以快捷方便生成普通二维码、艺术二维码(黑白/彩色)和动态GIF二维码。 GitHub网站参加&#xff1a;https://github.com/sylnsfar/qrcode 用法比…

Vue常用经典开源项目汇总参考-海量

Vue常用经典开源项目汇总参考-海量 Vue是什么&#xff1f; Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是&#xff0c;Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层&#xff0c;并且非常…

鼠标移入视频播放,鼠标移出播放停止,恢复到原来状态

<!doctype html> <html lang"en"> <head><meta charset"UTF-8"><title>鼠标移入视频播放&#xff0c;鼠标移出播放停止&#xff0c;恢复到原来状态</title><link rel"shortcut icon" href"http://f…

Pycharm常用高效技巧总结

文章目录1、PyCharm如何自动生成函数注释2、pycharm运行程序时在Python console窗口中运行3、Pycharm在创建py文件时,如何自动添加文件头注释4、Pycharm配置远程调试5、pycharm同一目录下无法import明明已经存在的.py文件1、PyCharm如何自动生成函数注释 一般在函数def()行下敲…

EntityFramework中常用的数据删除方式

最近在学EF&#xff0c;目前了解到删除操作有三种方式&#xff0c; 第一&#xff0c;官方推荐的先查询数据&#xff0c;再根据查询的对象&#xff0c;删除对象。 这是第一种&#xff0c;官方推荐 第二&#xff0c;自己创建一个对象&#xff0c;然后附加&#xff0c;然后删除。 …

Elasticsearch的前后台运行与停止(tar包方式)

备注&#xff1a;在生产环境中&#xff0c;往往一般用后台来运行。jps查看。 1、ES的前台运行 [hadoopdjt002 elasticsearch-2.4.3]$ pwd/usr/local/elasticsearch/elasticsearch-2.4.3[hadoopdjt002 elasticsearch-2.4.3]$ bin/elasticsearch 2、ES的后台运行 [hadoopdjt002 e…

解决pycharm运行Flask指定ip、端口更改无效

后来查了一下官网文档&#xff0c;原来Flask 1.0 版本不再支持之前的FLASK_ENV 环境变量了。 Prior to Flask 1.0 the FLASK_ENV environment variable was not supported and you needed to enable debug mode by exporting FLASK_DEBUG1. This can still be used to control…

Freeswitch总结大全

文章目录1、Freeswitch安装2、Freeswitch中文文档3、Freeswitch的event socket event list的中文简介4、freeswitch之sip协议的注册、呼叫、挂断流程5、Freeswitch之mod_cdr_csv6、一款第三方收费的mod_vad&#xff08;看介绍挺不错的&#xff0c;有做语音交互的童鞋可以看下&a…

Android中SimpleAdapter的使用—自定义列表

本人初学Android&#xff0c;今天研究到Adapter这块感觉挺有意思的&#xff0c;写了个自定义列表进行测试 首先我们新建一个layout列表布局文件&#xff0c;具体布局可以自己设定。 下面贴上我的自定义布局文件代码 1 <?xml version"1.0" encoding"utf-8&qu…

Module 的语法

Module 的语法 概述严格模式export 命令import 命令模块的整体加载export default 命令export 与 import 的复合写法模块的继承跨模块常量import()概述 历史上&#xff0c;JavaScript 一直没有模块&#xff08;module&#xff09;体系&#xff0c;无法将一个大程序拆分成互相依…

解决:SyntaxError: Non-UTF-8 code starting with '\xe6' in file

pycharm加注释报错SyntaxError: Non-UTF-8 code starting with \xe6 in file 处理 代码最上面加上编码格式 #coding:utf-8

Freeswitch之ASR(语音识别)总结大全

文章目录1、使用Pocket Sphinx进行英文语音识别2、PocketSphinx语音识别系统语言模型的训练和声学模型的改进3、PocketSphinx语音识别系统的编译、安装和使用4、FS之play_and_detect_speech模块5、一些开源的语音识别软件6、某大神写的一系列干货7、语音识别——基于深度学习的…

linux lvm扩容

linux lvm扩容 LVM磁盘管理 一、LVM简介... 1 二、 LVM基本术语... 2 三、 安装LVM... 3 四、 创建和管理LVM... 4 2、 创建PV.. 6 3、 创建VG.. 7 4、 创建LV.. 9 5、LV格式化及挂载... 10 一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写&#xff0c;它由Heinz …

Flask唯一URL规则--@app.route('/', endpoint='1')

Flask的URL规则基于werkzeug的路由模块&#xff0c; 用来保证URL的唯一性。 例如带斜线&#xff1a; app.route(/example/) def example():return ok如果访问一个结尾不带斜线的URL会被重定向到斜线的URL上。 &#xff08;/example&#xff09;变为(/example/) 如果不带斜线…

智能外呼系统相关资料总结

以下是从零开始搭建智能外呼系统的过程中收集的一些资料&#xff0c;希望对你会有帮助。 1、如何从零开始搭建智能外呼系统 参考&#xff1a;https://blog.csdn.net/pA2elX78qaJTADH/article/details/81351597 2、国内外优秀呼叫中心系统简介 参考&#xff1a;https://blog…

驱动开发之 设备读写方式:缓冲区方式

1. 设备对象一共同拥有三种读写方式&#xff1a;缓冲区方式读写&#xff08;Buffered方式&#xff09;&#xff1b;直接方式读写&#xff08;Direct方式&#xff09;。Neither方式。这三种方式的Flags分别相应DO_BUFFERED_IO,DO_DIRECT_IO,0 在buffered方式中。I/O管理器先创建…

flask开启调试的四种模式

在app.run()中加一个参数, debugTrue就可以开启debug模式 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello World!if __name__ __main__:app.run(debugTrue) 将app的debug属性赋值为True 1 from flask import Flask2 3 app Flas…