• 记一次由于环境变量引起的crontab执行没有日志输出的问题


    今天在scrapy的代码中加入监测环境变量来动态配置setting的代码,但代码部署后发现以前正常的crontab 任务没有任何日志输出 了。手动命令行执行却是可以执行的。查看/var/message/cron发现脚本是执行的,但无法确认是否执行成功。

    于是把crontab的任务改了一下 把 

    */20 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh 改成了  */1 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh > cron.log

    结果郁闷的是在目录下没发现cron.log

    。。。。

    一开始还以为是crontab的执行出问题了,各种crond重启,网上搜,还是不行

    后来终于发现原来是语句写的有问题,*/1 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh > cron.log 这个会把文件输出到执行用户(root)的根目录下,而我原本是想在/home/hjdang/下面的(粗心了,改成*/1 * * * * /usr/bin/sh /home/hjdang/scrapy_cron.sh > /home/hjdang/cron.log)就有了。

    但是脚本执行了,scrapy的日志啥的都没有啊,而且为了调试,我把

    nohup scrapy crawl smzdm_jingxuan  

    改成了

    nohup scrapy crawl smzdm_jingxuan & >> smzdm.log 10>&1 &

    但smzdm.log总是空文件。

    后来又发现这个语句也写的有问题,真是郁闷。改成下面终于看到输出了.

    nohup scrapy crawl smzdm_jingxuan  >> smzdm.log 10>&1 

    日志上报错了

    FileNotFoundError: [Errno 2] No such file or directory: '/Users/gaoxianghu/temp/scraping.log'

    明显是配置文件的路径找不到,但我明明用环境变量区分了啊,一顿搜索,终于发现了原因。有网友说:因为在Linux下用crontab执行定时任务时不会从用户profile文件中读取环境变量参数,所以导致在手动执行某个脚本时是成功的,但是写入crontab中定期执行时会出错。根本原因是某些命令无法使用crontab调用,因为用户登陆Linux操作系统的时候,”/etc/profile”, “~/.bash_profile”等配置文件会被自动执行,所以手动执行脚本能够成功,但是crontab执行失败。

    大意了啊,环境变量需要直接配在脚本中才行啊,配在环境变量文件里读不到啊,又一次雪的教训!

    喜欢艺术的码农
  • 相关阅读:
    php 无限极分类
    高德地图随笔
    安全随笔
    关于专线映射问题
    js小技巧总结
    php+ajax 文件上传
    去除数组中重复的元素
    关于ueditor插入不了动态地图
    vue.js 安装
    js轮播
  • 原文地址:https://www.cnblogs.com/zjhgx/p/14450247.html
Copyright © 2020-2023  润新知