crontab定时器任务以及不运行的原因

1 写入定时器任务

crontab -e
35 14 * * * python3 /home/yanyouscrapy/tutorial/lucas_scrapy_auto_run.py >/dev/null 2>&1 

前五个*代表分,时,几号,几月,星期几

2重启crontab服务

sudo service cron restart  
service cron status

3 开启cron的log

vi /etc/rsyslog.d/50-default.conf  

打开cron的log,把cron面前的*去掉,然后重启log服务

sudo  service rsyslog  restart

4 解决ubuntu下定时任务不执行问题

目标:定时任务:每分钟向屏幕输出"Hello world!"。


有两种实现方式:

1)输入crontab -e命令,根据提示直接在当前cron task文本最后面插入如下命令(记得回车):

* * * * * echo "Hello world!"

2)由于每个用户的定时任务都在/var/spool/cron/crontabs目录下有个与用户名一致的任务文件,因此也可以通过vim直接编辑:

sudo vim /var/spool/cron/crontabs/waterfronter             #注:waterfronter为当前用户名

同样在文件末行插入:

* * * * * echo "Hello world!"

保存退出,并通过crontab -l查看定时任务创建成功。


2、然后等待,若干分钟后发现屏幕并未输出"Hello world!"怎么回事?!

1)刚开始怀疑是cron服务没有启动,遂执行:

sudo service cron status

发现cron服务是running的,排除;

2)继而怀疑是任务文件创建后未能被系统及时get到,因而执行:

sudo service cron restart

重启cron后问题依旧,排除;

3)于是进一步查看cron运行日志(/var/log/cron.log),但是并未找到相关文件,原因是ubuntu默认没有开cron日志,执行命令:

sudo vim /etc/rsyslog.d/50-default.conf

找到cron.log相关行,将前面注释符#去掉,保存退出,重启rsyslog:

sudo  service rsyslog  restart

执行less -10 /var/log/cron.log再次查看cron运行日志,log出来了,提示如下信息:

No MTA installed, discarding output

原因是cron把屏幕输出都发送到email了,而当前环境并未安装email server,于是系统报错,解决方面就是不要直接向屏幕输出内容,而是重定向到一个文件。

3、修改任务文件

sudo vim /var/spool/cron/crontabs/waterfronter

将末行改为:

* * * * * echo "Hello world!" >> /tmp/cron_log.txt

保存退出,同时reload cron服务:

sudo service cron reload

若干分钟后查看/tmp/cron_log.txt,“Hello world!”每隔一分钟输出一次,问题解决。

 

5执行完就ok,别发邮件

如果在日志中能看到有这样的记录

Jan 23 12:55:01 iZbp12o440hd7llqz14ebpZ CRON[3990]: (root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)
这是一个很常见的错误,很多新手都会碰到这个问题,这个错误原因是cron执行完你的命令后就会给你发一封邮件,但是我邮件都没配置往哪发啊,所以就报错了。难道真的要我把邮箱配置起来嘛,当然不要,也不知道怎么配,更不想去配,你执行完就完事了呗,给我发邮件干啥呢。可能老外比较喜欢用邮件,想每天登录邮箱都能看到满满的一箱信,哈哈,扯远了。
回归正题,我们只需要在每条cron命令空一格后加上这几个字

>/dev/null 2>&1
比如我的一条命令
*/5 * * * * sh /var/xxx/xxx.sh >/dev/null 2>&1
明确告诉你,完事别给我发什么邮件了,老子不需要。然后
service cron restart
把cron重启一下,静静的等待奇迹的出现。。。
如果还有问题,看日志,一步步排查,还有一个很值得注意的就是要确保你的脚本命令尽量使用全路径,有些环境变量没配的话是执行不起来的。


6 利用python跑

使用python脚本来实现:
新建个crawl.py文件,写入以下字符:

# -*- coding: utf-8 -*-
import scrapy
from scrapy import cmdline
import os


os.chdir("/home/yanyouscrapy/tutorial")
cmdline.execute("scrapy crawl quotes ".split())


官方推荐使用CrawlerProcess来启动一个爬虫程序,链接:
https://doc.scrapy.org/en/latest/topics/practices.html,更改crawl.py文件如下:

  # -*- coding: utf-8 -*-

  import scrapy
  from scrapy.crawler import CrawlerProcess
  from scrapy.utils.project import get_project_settings
  from spiders.test_spider import *


  process = CrawlerProcess(get_project_settings())
  process.crawl(TestSpider)
  process.start()

 

参考了:

https://blog.csdn.net/u012129468/article/details/77926701#commentBox

https://www.cnblogs.com/lijurui/p/9803050.html

https://www.jianshu.com/p/83c21af7726d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许进进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值