建立网站就是制作网页,南宁公司网站建设,网站建设的规划方案,网页设计师介绍文章目录前言#xff1a;1、建立定时任务的两种方式1.1、crontab -e1.2、vi /etc/ crontab2、两种方法的区别2.1、用户级2.2、系统级3、解决办法前言#xff1a;
之前第一次要在生产环境部署定时任务#xff0c;无奈的是#xff0c;博主对定时任务这块还是个小白#xff…
文章目录前言1、建立定时任务的两种方式1.1、crontab -e1.2、vi /etc/ crontab2、两种方法的区别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.cap1.2、vi /etc/ crontab
vi /etc/ crontab
#添加定时任务
30 10 * * * root /sbin/reboot重新加载配置
/sbin/service crond reload
重启cron
/sbin/service crond restart2、两种方法的区别
crontab -e对应的是用户级vi /etc/ crontab对应的系统级的
2.1、用户级
使用crontab -e 这个命令会自动打开vim然后编辑定时脚本文件编写后保存在ubuntu下会被写到/var/spool/cron/crontabs目录下生成一个和用户名一致的文件,我们可以直接用crontab -l查看内容,
mllinux:~$ crontab -e
mllinux:~$ crontab -l
30 * * * * /home/ml/tools/login.sh
mllinux:~$ sudo cat /var/spool/cron/crontabs/ml
30 * * * * /home/ml/tools/login.sh2.2、系统级
cronotab -e是针对用户来设计的如果是系统的例行性任务需要编辑/etc/crontab这个文件编辑完所有用户都会受其影响
SHELL/bin/bash
PATH/sbin:/bin:/usr/sbin:/usr/bin
MAILTOroot
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 21第二步创建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